|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;历程 ASP利用组件
aspImage是ServerObjects站点上十分好的一个组件,它可使我们使用Asp完成良多关于图形的处置功效,他的功效壮大,假如你必要懂得更具体的信息你能够会见它的官方网站,在这里就不讲怎样利用这个组件了,我们在这里要讲的是怎样完成这类组件,固然上面的例子中利用GDI+并非完成组件图形处置的独一办法,人人也能够本人尝尝其他的办法.
以下是完成历程
1、起首利用VisualC++的导游创建ATL项目
2、接上去增加一个ATLActiveServerPage组件接口类
3、天生称号为AspPicCom的类而且选择ASP外部工具Response
4、在IAspPicCom接口上增加属性和办法,以下表
称号
种别
寄义
挪用办法
FontName属性字体称号字符串范例
利用办法
.FontName="宋体"FontSize属性字体巨细整型
利用办法
.FontSize=40FontStyle属性字体范例整形
Regular=0,
Bold=1,
Italic=2,
BoldItalic=3,
Underline=4,
Strikeout=8
利用办法
.FontStyle=8ImgFormat属性图形格局字符串范例
image/gif
image/jpeg
image/bmp
......
利用办法
.ImgFormat="image/gif"SetFontColor办法设置字体色彩利用办法
.SetFontColor255,3,242,4
下面的数字分离代表Alpha,Red,Green,BlueSetBackColor办法设置字体背景色彩利用办法
.SetBackColor255,3,242,4
下面的数字分离代表Alpha,Red,Green,BlueShowPic办法将图片发送到客户端利用办法
.ShowPic
5、要在ASP组件中利用GDI+,必要到场一些代码
1、你必要在Stdafx.h文件中到场上面两行:
#include
usingnamespaceGdiplus;
并且必要毗连GDIPlus.lib库
#pragmacomment(lib,"gdiplus.lib")
2、声明ULONG_PTRgdiplusToken;为一个全局大概类的外部成员变量。
3、在完成类的FinalConstruct函数中到场:
GdiplusStartupInputgdiplusStartupInput;
//初始化GDI+
GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
4、在FinalRelease函数中到场:
GdiplusShutdown(gdiplusToken);
如许你就能够利用GDI+供应的图形处置函数了。
注:关于GDI+的利用你能够在以下网址找到参考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdi+/gdi+.asp
http://www.codeproject.com/vcpp/gdiplus/
六接上去就是完成在四中列出的这些属性和办法,上面列出ShowPic办法的一段代码,其他代码请检察源代码
<P> Bitmapbitmap(1,1,PixelFormat48bppRGB);
Graphicsgraphics(&bitmap);
USES_CONVERSION;
Fontfont(OLE2CW(m_bstrFontName),(float)m_fFontSize,m_nFontStyle,UnitPoint,NULL);
PointForigin(0,0);
StringFormatformat;
format.SetAlignment(StringAlignmentCenter);
RectFboundRect;
graphics.MeasureString(OLE2CW(m_bstrText),m_bstrText.Length(),&font,origin,&format,&boundRect);
intnWidth=(int)boundRect.Width;
intnHeight=(int)boundRect.Height;
Bitmapbm(nWidth,nHeight,PixelFormat48bppRGB);
Graphics*g=Graphics::FromImage(&bm);
boundRect.Width=boundRect.Width*2;
SolidBrushsolidbrush(m_cBackground);
g->FillRectangle(&solidbrush,boundRect);
SolidBrushSolidFont(m_cFontColor);
PointFfPoint(0,0);
g->DrawString(OLE2CW(m_bstrText),m_bstrText.Length(),&font,fPoint,&SolidFont);
intresult;
CLSIDpngClsid;
result=GetCodecClsid(OLE2W(m_btrImgFormat),&pngClsid);
HRESULThr;
HGLOBALhGlobal=GlobalAlloc(GMEM_MOVEABLE,0);
CComPtrpStm;
if(FAILED(hr=CreateStreamOnHGlobal(hGlobal,TRUE,&pStm)))returnhr;
bm.Save(pStm,&pngClsid,NULL);
ULONGcElements=(ULONG)GlobalSize(hGlobal);
LPBYTElpData=(LPBYTE)GlobalLock(hGlobal);
SAFEARRAY*pArray=SafeArrayCreateVector(VT_UI1,0,cElements);
for(UINTiElement=0;iElement<cElements;iElement++)
{
longidx=iElement;
SafeArrayPutElement(pArray,&idx,((LPBYTE)lpData)+iElement);
}
GlobalUnlock(hGlobal);
CComVariantvBytes;
vBytes.vt=VT_ARRAY|VT_UI1;
vBytes.parray=pArray;
m_piResponse->Clear();
m_piResponse->put_ContentType(m_btrImgFormat);
m_piResponse->BinaryWrite(vBytes);
m_piResponse->End();
7、如今组件的完成部分就半途而废了,我们写一段ASP来测试以下这个组件
<P><%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<html>
<body>
<%
setPicture=Server.CreateObject("AspPic.AspPicCom")
picture.Text="你能瞥见我吗?我来自www.webjx.com!"
picture.FontName="黑体"
picture.FontSize=40
picture.ImgFormat="image/jpeg"
picture.FontStyle=1
Picture.SetFontColor255,3,242,4代表Alpha,Red,Green,Blue
Picture.SetBackColor10,243,42,54代表Alpha,Red,Green,Blue
Picture.ShowPic
setPicture=nothing
%>
</body>
</html>
注:在利用前先注册组件regsvr32AspPic.dll
翻开这个ASP网页,你将会看到以下的图片
如今完成aspImage的详细思绪就讲完了,如今假如必要更多的效果,你能够本人丰厚这个组件
题外话:这类组件的用处很广,如yahoo.com注册会员时会显现图形单词以避免盘算机主动注册,由于盘算秘密辨认图片上的笔墨是低效并且很不简单的事变,这类组件更多的是使用到图表的天生,如柱状图、馅饼图、波形图等等。
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失; |
|