この記事のサンプル ソース コードをダウンロードする
この記事を読む前に、次の
GDI+
に問い合わせることをお勧めします。
ATL を使用してコンポーネントを生成する
STL
ASP 使用コンポーネント
aspImage は、ServerObjects サイトにある非常に優れたコンポーネントです。これを使用すると、Asp を使用して多くのグラフィック処理機能を実装できます。詳細な情報が必要な場合は、公式 Web サイトを参照してください。ここでは説明しません。このコンポーネントの使用方法について説明します。もちろん、次の例で GDI+ を使用することだけがコンポーネント グラフィックス処理の実装方法であるわけではありません。他の方法は自分で。
実装プロセスは次のとおりです
。まず、Visual C++ ウィザードを使用して ATL プロジェクトを作成します。
2. 次に、ATL Active Server Page コンポーネント インターフェイス クラスを追加します。
3. AspPicCom という名前のクラスを生成し、ASP 内部オブジェクト Response を選択します。
4. 次の表に示すように、プロパティとメソッドを IAspPicCom インターフェイスに追加します。
名前 | カテゴリ | 意味 | 呼び出しメソッド | |
FontName | 属性 | フォント名 | 文字列タイプ 使用方法 .FontName="宋体" | |
FontSize | プロパティの | フォント サイズの | 整数 使用方法 .FontSize=40 | |
FontStyle | プロパティの | フォント タイプの | 整形 通常 = 0、 太字 = 1、 斜体 = 2、 太字斜体 = 3、 下線 = 4、 三振数=8 使用方法 .FontStyle=8 | |
ImgFormat | プロパティ | のグラフィック形式の | 文字列型 画像/GIF 画像/jpeg 画像/bmp ... 使用方法 .ImgFormat="image/gif" | |
SetFontColor | メソッドは、 | フォントの色 | とその使用方法を | 設定します。.SetFontColor 255,3,242,4 上の数字はそれぞれ、アルファ、赤、緑、青を表します。 |
SetBackColor | メソッドを | 使用してフォントの背景色を設定する | 方法 | 。.SetBackColor 255,3,242,4 上の数字は、アルファ、赤、緑、青を表します。ShowPic |
メソッド | は | 画像をクライアントに送信します | 。 .ShowPic |
#include <Gdiplus.h> 名前空間 Gdiplus を使用し
、GDIPlus.lib ライブラリに接続する必要があります
#pragma comment(lib, "gdiplus.lib")
2. ULONG_PTR gdiplusToken; をクラスのグローバルまたは内部メンバー変数として宣言します。
3. 実装クラスの FinalConstruct 関数に次のように追加します。
GdiplusStartupInput gdiplusStartupInput; //GDI+を初期化する GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);4.
GDI+ が提供するグラフィックス処理関数を
FinalRelease 関数で
使用できるように、GdiplusShutdown(gdiplusToken);を追加します。
注: GDI+ の使用については、次の URL で参照できます:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdi+/gdi+.asp
http ://www .codeproject.com/vcpp/gdiplus/
6 次のステップは、4 にリストされているプロパティとメソッドを実装することです。ShowPic メソッドのコードの一部を以下にリストします。他のコードについては、ソース コードの
ビットマップを参照してください。
ビットマップ(1,1,PixelFormat48bppRGB); グラフィックス グラフィックス(&ビットマップ); USES_CONVERSION; フォント font( OLE2CW(m_bstrFontName),(float)m_fFontSize,m_nFontStyle,
ユニットポイント、NULL); PointF 原点(0, 0); StringFormat 形式。 format.SetAlignment(StringAlignmentCenter); RectF バウンドRect; graphics.MeasureString(OLE2CW(m_bstrText),m_bstrText.Length (),
&font、origin、&format、&boundRect); int nWidth = (int)boundRect.Width; int nHeight = (int)boundRect.Height; ビットマップ bm(nWidth,nHeight,PixelFormat48bppRGB); グラフィックス* g=グラフィックス::FromImage (&bm); boundRect.Width=boundRect.Width*2; 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); int の結果; CLSID pngClsid; 結果 = GetCodecClsid(OLE2W(m_btrImgFormat ), &pngClsid); H結果 時間; HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 0); CComPtr<IStream> pStm; if (FAILED(hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm) )) hr を返します。 bm.Save(pStm,&pngClsid,NULL); ULONG cElements = (ULONG)GlobalSize(hGlobal); LPBYTE lpData = (LPBYTE)GlobalLock(hGlobal); SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, 0, cElements); for (UINT iElement = 0; iElement < cElements; iElement++) { 長い idx = iElement; SafeArrayPutElement(pArray, &idx, ((LPBYTE)lpData) + iElement); } GlobalUnlock(hGlobal); CComVariant vBytes; vBytes.vt = VT_ARRAY | vBytes.parray = pArray; m_piResponse->クリア(); m_piResponse->put_ContentType (m_btrImgFormat); m_piResponse->BinaryWrite(vBytes); m_piResponse->End();
7. コンポーネントの実装が完了したので、次のコンポーネント
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>をテストする ASP を作成します。
<html> <本文> <% set Picture=Server.CreateObject("AspPic.AspPicCom") pic.Text="私が見えますか? 私は www.goodassister.com から来ました!" pic.FontName="ヘルド" 画像.FontSize= 40 picture.ImgFormat = "画像/jpeg" Picture.FontStyle= 1 Picture.SetFontColor 255,3,242,4 '' は、アルファ、赤、緑、青を表します Picture.SetBackColor 10,243,42,54 '' は、アルファ、赤、緑、青を表します Picture.ShowPic 画像=なしを設定します %> </body> </html>
注: 使用する前にコンポーネント regsvr32 AspPic.dll を登録してください。
この ASP Web ページを開くと、次の画像が表示されます。
これで、aspImage を実装するための具体的なアイデアが完成しました。さらに効果が必要な場合は、このコンポーネントを自分で強化できます。
たとえば、yahoo.com のメンバーとして登録する場合などに使用できます。このタイプのコンポーネントは、ヒストグラム、円グラフ、波形グラフなどのグラフの生成によく適用されます。これは、コンピュータが画像上のテキストを認識するのが非効率的で簡単ではないためです。等
この記事はこれで終わりです。何かコメントがある場合、または私が間違っていると思われる場合は、お知らせください。
電子メール:[email protected]