网上文摘 小说 Flash游戏 最近更新 下载排行 资源分类 下载指南
经典编程资源 精彩不容错过
设为首页
加入收藏
联系我们
当前位置:Delphi园地技巧文章编程心得 → 通过位图来创建窗口区域
通过位图来创建窗口区域
日期:2005年4月1日 作者: 人气: 查看:[大字体 中字体 小字体]
//此函数通过一张位图来创建一个区域,支持bmp格式和jpg格式
//位图中黑色的地方将不透明,非黑色的地方透明,
//创建完毕后可以通过SetWindowRgn函数设置窗口或控件的形状,如:
//setWindowRgn(handle,zjs_createImageRegion('c:\goomoo.bmp'),true);
uses jpeg;
function zjs_createImageRegion(imageFile:TFilename):HRGN;
var
bitmap:TBitmap; //位图对象
jpg:TJpegImage;
hRegion,hTmpRegion:HRGN; //hRegion: 最终区域 hTmpRegion 临时区域
h,l,left,right:integer; //h:行 l:列 left:临时区域的左边 right:临时区域的右边
started:Boolean; //是否开始记录
ext:String; //图片扩展名
begin
if not fileExists(imageFile) then
begin
result:=0;
exit; //文件不存在则退出,并返回0
end;
bitmap:=TBitmap.Create;
try
ext:=extractFileExt(imageFile);
if (ext='.jpg') or (ext='.jpeg') then //如果是jpg图片
begin
jpg:=TJpegImage.Create;
try
jpg.LoadFromFile(imageFile);
bitmap.Assign(jpg); //从Jpg中把位图拷贝过来
finally
jpg.Free; //及时释放jpg
end;
end
else if ext='.bmp' then
bitmap.LoadFromFile(imageFile) //载入位图
else
begin
result:=0;
exit;
end; 
hRegion:=createRectRgn(0,0,0,0); //创建一个初始的空的区域
//初始化变量,消除警告信息
left:=0; right:=0;
//开始扫描图片的每个像素
for h:=0 to bitmap.Height-1 do
begin
started:=false; 
for l:=0 to bitmap.Width-1 do
begin
if bitmap.Canvas.Pixels[l,h]=clBlack then //黑色为不透明区域,其他颜色为透明区域
begin
if not started then
begin
started:=true; //开始记录右边
left:=l; right:=l+1;
end
else //started
begin
right:=l;
end;
end
else
begin
if started then //如果已经开始并且该点的颜色不是黑色
begin
started:=false; //结束记录右边
hTmpRegion:=createRectRgn(left,h,right,h+1);
combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
end;
end;
end;
if started then //到了图片的右边还没有结束
begin
if right>bitmap.Width-1 then right:=bitmap.Width-1;
hTmpRegion:=createRectRgn(left,h,right,h+1);
combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
end;
end;
finally
bitmap.Free;
end;
Result:=hRegion;
end;

(出处:Delphi园地)

相关文章:
·如何自已做预览窗口
·用Delphi控制IE窗口
·Delphi编程中实现窗口分割
·用鼠标拖动无标题窗口
·查阅可视窗口标题
·用两种方法快速简单的实现窗口淡入淡出
·"网络蚂蚁"和"FlashGet"的悬浮窗口的实现
·打印机的设置窗口看不到已经安装的打印机列表的处理
 → 特别推荐
 → 热点TOP10
关于我们 | 广告服务 | 发布资源 | 联系站长 Copyright © 2002-2006 Delphi园地 All Rights Reserved