ASPImage组件的实现过程[图](2)
作者:sillyboy 来源:goodassister.com 发布时间:2008-02-03 15:37:00
标签:ASPImage,组件,cgi,asp
五、 要在ASP组件中使用GDI+,需要加入一些代码
1、你需要在Stdafx.h文件中加入下面两行:
#include <Gdiplus.h>
using namespace Gdiplus;
而且需要连接GDIPlus.lib库
#pragma comment(lib,"gdiplus.lib")
2、声明ULONG_PTR gdiplusToken;为一个全局或者类的内部成员变量。
3、在实现类的FinalConstruct函数中加入:
GdiplusStartupInput gdiplusStartupInput;
//初始化 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方法的一段代码,其他代码请查看源代码
Bitmap bitmap(1,1,PixelFormat48bppRGB);
Graphics graphics(&bitmap);
USES_CONVERSION;
Font font( OLE2CW(m_bstrFontName),(float)m_fFontSize,m_nFontStyle,UnitPoint,NULL);
PointF origin(0, 0);
StringFormat format;
format.SetAlignment(StringAlignmentCenter);
RectF boundRect;
graphics.MeasureString(OLE2CW(m_bstrText),m_bstrText.Length (), &font, origin, &format, &boundRect);
int nWidth = (int)boundRect.Width;
int nHeight = (int)boundRect.Height;
Bitmap bm(nWidth,nHeight,PixelFormat48bppRGB);
Graphics* g=Graphics::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);
int result;
CLSID pngClsid;
result = GetCodecClsid(OLE2W(m_btrImgFormat ), &pngClsid);
HRESULT hr;
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);
for (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->Clear ();
m_piResponse->put_ContentType (m_btrImgFormat);
m_piResponse->BinaryWrite(vBytes);
m_piResponse->End ();
七、现在组件的实现部分就大功告成了,我们写一段ASP来测试以下这个组件
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<html>
<body>
<%
set Picture=Server.CreateObject("AspPic.AspPicCom")
picture.Text ="你能看见我吗?www.aspxhome.com!"
picture.FontName="黑体"
picture.FontSize= 40
picture.ImgFormat = "image/jpeg"
picture.FontStyle= 1
Picture.SetFontColor 255,3,242,4 ''代表Alpha ,Red,Green,Blue
Picture.SetBackColor 10,243,42,54 ''代表Alpha ,Red,Green,Blue
Picture.ShowPic
set Picture=nothing
%>
</body>
</html>
注:在使用前先注册组件 regsvr32 AspPic.dll
打开这个ASP网页,你将会看到如下的图片
现在实现aspImage的具体思路就讲完了,现在如果需要更多的效果,你可以自己丰富这个组件.
题外话:这类组件的用途很广,如yahoo.com注册会员时会显示图形单词以防止计算机自动注册,因为计算机要识别图片上的文字是低效而且很不容易的事情,这类组件更多的是应用到图表的生成,如柱状图、馅饼图、波形图等等。
0
投稿
猜你喜欢
- Some readers have asked to me what
- 内容摘要:MySQL易学易用,附带丰富的技术文档,这两个因素使之被广泛应用。然而,随着MySQL发展加快,即使一个MySQL老手有时也会为该
- 一、什么是匿名函数?在Javascript定义一个函数一般有如下三种方式:函数关键字(function)语句:function f
- 现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽
- 这几天看了篇叫"Penetration: from application down to OS (Oracle)"的文
- 现象:在IE下,用JS修改p标签的innerHTML时,出"未知的运行时错误(unknown runtime error)&quo
- 现在流行虚拟主机建站,我也有个网站,也算是个站长咯。当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本
- 这篇论坛文章主要介绍了Oracle数据库到SQL Server数据库主键的迁移过程,具体内容请参考下文。由于项目需要要将以前Oracle的数
- 使用fso对象遍历指定文件夹函数:'遍历文件夹sub ListFolderContents(path) &nbs
- 现在的离线浏览器很多,可是多数都是共享软件,或是英文软件,这给我们的操作带来了很大的不便。其实微软的网页制作工具FrontPage XP有一
- 如果网站只开了80端口,你会发现下面的方法是比较有用的,其中用的方法几乎都不是我发现的,文总包括一些注入时的个人经验和技巧方法可以说有4种(
- 这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。风格A
- 一个很棒的 blog 文章,是 PPK 两年前写的,文章中解释了 contains() 和 compareDocumentPosition(
- 假设要生成一千万个随机数,常规的做法如下:var numbers = [];for (var&nbs
- 数据库是数据的集合,与数学的集合论有密不可分的关系。为提高查询速度,我们可以:对数据表添加索引,以加快搜索速度;通过编程技巧最大限度地利用索
- jQuery 将马上发布 1.4 正式版,代码也从 googlecode 上迁移到了 github. jQuery 是我接触的第一个 JS
- asp之家注:本篇asp留言本教程可以说是我见过的最详细,写的最认真的,最适合初学者来学习asp的一篇教程。在此感谢作者hemooday。可
- 一空间多域名绑定3种方法,HTML代码格式:<html> <script language=javascript
- 最近的一个页面中碰到的,本来想用 border 来模拟设计图的虚线效果,但是很明显 border 效果不如设计图来的好看。顺便研究了下 da
- 1、su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面。 2、sqlplus /