Téléchargez l'exemple de code source de cet article
Avant de lire cet article, il est préférable de prendre contact avec les
GDI+
suivants
Générer des composants à l'aide d'ATL
STL
Composants d'utilisation ASP
aspImage est un très bon composant du site ServerObjects. Il nous permet d'utiliser Asp pour implémenter de nombreuses fonctions de traitement graphique. Ses fonctions sont puissantes. Si vous avez besoin d'informations plus détaillées, vous pouvez visiter son site officiel, qui ne sera pas abordé ici. Parlons de la façon d'utiliser ce composant. Ce dont nous allons parler ici, c'est comment implémenter ce type de composant. Bien entendu, utiliser GDI+ dans l'exemple suivant n'est pas le seul moyen d'implémenter le traitement graphique des composants. d'autres méthodes vous-même.
Voici le processus de mise en œuvre
.Tout d'abord, utilisez l'assistant Visual C++ pour créer un projet ATL.
2. Ajoutez ensuite une classe d'interface de composant ATL Active Server Page
3. Générez une classe nommée AspPicCom et sélectionnez l'objet interne ASP Response
4. Ajoutez des propriétés et des méthodes à l'interface IAspPicCom, comme indiqué dans le tableau suivant :
nom | catégorie | signification | méthode d'appel | |
attribut | FontName | nom depolice | chaîne type Comment utiliser .FontName="宋体" | |
Propriété | FontSize | taille de police | entier Comment utiliser .FontSize=40 | |
Mise en forme | du type de police | de la propriété | FontStyle | Régulier = 0, Gras = 1, Italique = 2, GrasItalique = 3, Souligné = 4, Barré = 8 Comment utiliser .FontStyle=8 |
Type de chaîne | de format graphique | de la propriété | ImgFormat | image/gif image/jpeg image/bmp ... Comment utiliser |
.ImgFormat="image/gif" | ||||
SetFontColor | définit | la couleur de la police | et comment l'utiliser .SetFontColor 255,3,242,4 Les nombres ci-dessus représentent respectivement Alpha, Rouge, Vert et Bleu. | |
Comment utiliser | laméthode | SetBackColor | pour définir la couleur d'arrière-plan de la police. | .SetBackColor 255,3,242,4 Les nombres ci-dessus représentent Alpha, Rouge, Vert et Bleu. |
La | méthode | ShowPicenvoie l'image au client | . .ShowPic |
#include <Gdiplus.h> utilisant l'espace de noms Gdiplus ;
et doit se connecter à la bibliothèque GDIPlus.lib
#pragma comment(lib, "gdiplus.lib")
2. Déclarez ULONG_PTR gdiplusToken comme variable membre globale ou interne de la classe.
3. Ajoutez à la fonction FinalConstruct de la classe d'implémentation :
GdiplusStartupInput gdiplusStartupInput; //Initialiser GDI+ GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);4. Ajoutez :
GdiplusShutdown(gdiplusToken);
pour pouvoir utiliser les fonctions de traitement graphique fournies par GDI+
dans la fonction FinalRelease
.Remarque : Concernant l'utilisation de GDI+, vous pouvez trouver une référence à l'URL suivante :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdi+/gdi+.asp
http ://www .codeproject.com/vcpp/gdiplus/
6 L'étape suivante consiste à implémenter les propriétés et les méthodes répertoriées en 4. Un morceau de code pour la méthode ShowPic est répertorié ci-dessous. Pour les autres codes, veuillez consulter le code source
Bitmap. bitmap(1,1,PixelFormat48bppRGB); Graphiques graphiques (&bitmap); USES_CONVERSION ; Police de police (OLE2CW(m_bstrFontName),(float)m_fFontSize,m_nFontStyle,
UnitPoint,NULL); Origine PointF (0, 0); Format ChaîneFormat ; format.SetAlignment(StringAlignmentCenter); RectF liéRect ; graphiques.MeasureString(OLE2CW(m_bstrText),m_bstrText.Length (),
&fonte, origine, &format, &boundRect); int nWidth = (int)boundRect.Width; int nHeight = (int)boundRect.Height; Bitmap bm(nLargeur,nHauteur,PixelFormat48bppRGB); Graphiques* g=Graphiques::FromImage (&bm); boundRect.Width=boundRect.Width*2; SolidBrush solidbrush(m_cBackground); g->FillRectangle(&solidbrush,boundRect); SolidBrush SolidFont(m_cFontColor); PointF fPoint(0,0); g->DrawString(OLE2CW(m_bstrText),m_bstrText.Length (),
&font,fPoint,&SolidFont); résultat entier ; CLSID pngClsid; résultat = GetCodecClsid(OLE2W(m_btrImgFormat ), &pngClsid); HRESULT heures ; HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 0); CComPtr<IStream> pStm; if (FAILED(hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm) )) return hr; bm.Save(pStm,&pngClsid,NULL); ULONG cElements = (ULONG)GlobalSize(hGlobal); LPBYTE lpData = (LPBYTE)GlobalLock(hGlobal); SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, 0, cElements); pour (UINT iElement = 0; iElement < cElements; iElement++) { long idx = iElement ; SafeArrayPutElement(pArray, &idx, ((LPBYTE)lpData) + iElement); } GlobalUnlock(hGlobal); CComVariant vBytes ; vBytes.vt = VT_ARRAY | VT_UI1 ; vBytes.parray = pArray; m_piResponse->Effacer (); m_piResponse->put_ContentType (m_btrImgFormat); m_piResponse->BinaryWrite(vBytes); m_piResponse->Fin ();
7. Maintenant que l'implémentation du composant est terminée, nous écrivons un ASP pour tester le composant suivant
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <corps> <% set Picture=Server.CreateObject("AspPic.AspPicCom") picture.Text="Pouvez-vous me voir ? Je viens de www.goodassister.com !" picture.FontName="Heold" image.FontSize= 40 image.ImgFormat = "image/jpeg" image.FontStyle= 1 Picture.SetFontColor 255,3,242,4'' représente Alpha, Rouge, Vert, Bleu Picture.SetBackColor 10,243,42,54'' représente Alpha, Rouge, Vert, Bleu Image.ShowPic définir l'image = rien %> </corps> </html>
Remarque : Enregistrez le composant regsvr32 AspPic.dll avant utilisation
Ouvrez cette page Web ASP, vous verrez l'image suivante
Les idées spécifiques pour l'implémentation d'aspImage sont désormais terminées. Désormais, si vous avez besoin de plus d'effets, vous pouvez enrichir ce composant vous-même.
Digression : ce type de composant a un large éventail d'utilisations. Par exemple, lorsque Yahoo.com s'inscrit en tant que membre, graphique. des mots seront affichés pour empêcher l'ordinateur de s'enregistrer automatiquement, car il est inefficace et difficile pour les ordinateurs de reconnaître le texte sur les images. Ce type de composant est davantage appliqué à la génération de graphiques, tels que des histogrammes, des diagrammes circulaires, des graphiques de forme d'onde. etc.
C'est tout pour cet article. Si vous avez des commentaires ou si vous pensez que j'ai fait une erreur, n'hésitez pas à me le dire.
Courriel : [email protected]