上一篇:通用查询组件设计(续二) >>
取得图片的透明区域
(*//
标题:取得图片的透明区域
说明:适用于制作复杂的不规则窗体
设计:Zswang
支持:wjhu111@21cn.com
日期:2004-03-10
//*)
(*//============================================================================
设计思路:~~
就是对画布一行一行的扫描~~
对于不是透明色相连的像素都看成一条条的线段~~
───────── ─ ─── ─────
─────── ──── ───────
─── ─── ── ───────
── ─────────
用这些线段组合成不规则的区域~~
线段就是找到开始位置和结束位置就行了~~
组合区域是最花时间的地方~~
减少组合区域的频率就可以提高运行的速度~~
用线段组合就比用点组合少多了~~
============================================================================//*)
function GraphicToRGN(mGraphic: TGraphic; mTransPoint: TPoint): HRGN;
var
I, J: Integer;
vStart: Integer;
vHandle: HRGN;
vTransColor: TColor;
begin
Result := 0;
if not Assigned(mGraphic) then Exit;
Result := CreateRectRgn(0, 0, 0, 0);
with TBitmap.Create do try
Width := mGraphic.Width;
Height := mGraphic.Height;
Canvas.Draw(0, 0, mGraphic);
vTransColor := Canvas.Pixels[mTransPoint.X, mTransPoint.Y];
for I := 0 to Height - 1 do begin
vStart := 0;
for J := 0 to Width do begin
if (Canvas.Pixels[J, I] <> vTransColor) and (J < Width) then
if vStart < 0 then
vStart := J
else
else if vStart >= 0 then begin
vHandle := CreateRectRgn(vStart, I, J, I + 1);
try
CombineRgn(Result, Result, vHandle, RGN_OR);
finally
DeleteObject(vHandle);
end;
vStart := -1;
end;
end;
end;
finally
Free;
end;
end; { GraphicToRGN }
//Example
procedure TForm1.Button1Click(Sender: TObject);
var
vRGN: HRGN;
begin
BorderStyle := bsNone;
Image1.Left := 0;
Image1.Top := 0;
vRGN := GraphicToRGN(Image1.Picture.Graphic, Point(0, 0));
try
SetWindowRgn(Handle, vRGN, True);
finally
DeleteObject(vRGN);
end;
end;
下一篇:搜索字符串在流中的位置 >>
相关文章:
- · Delphi例程-应用程序级信息
- · 使用IntraWeb进行Web编程
- · 【Gabing Delva 第0篇】我的小铁锨(代序)
- · 用Delphi编写Win2000服务程序
- · 使用IntraWeb进行Web编程(二)
- · 如何用idFTP遍历整个目录----下载、删除
- · 从一个组合数的求解谈开去
- · 我写的采用csv格式将数据转换为excel的函数,带有分栏功能
- · 事件的危机——调试手记之一
- · 一个四舍五入的函数
- · 窗体的建立时机及缓冲的思想在ini文件中的应用.txt
- · 窗体的建立时机及缓冲的思想在ini文件中的应用.
- · 用Delphi实现文件下载的几种方法
- · 通用查询组件设计(续三)
- · 通用查询组件设计(续四)
- · 在Delphi7中实现停靠功能
- · Delphi 5 反汇编摘要
- · Delphi例程-文件管理例程(1~15)
- · 从数据库绘制MapX地图
- · 用Delphi建立通讯与数据交换服务器—Transceiver技术剖析(上)
- · 用Delphi建立通讯与数据交换服务器—Transceiver技术剖析(下)
- · 《网络吸管》开发手记
- · 关于SMTP和POP3使用及关于客户-服务端的自动连线问题
- · 在Delphi中使用动态图标
- · 在流中查找任意字串
- · 流的解压及压缩(代码精简高效)
- · 在Listbox加背景图
- · Delphi7目录结构----初学者参考
- · 深入Delphi编程.txt
- · 用C++ Builder的MD5控件实现软件防护
- · Delphi模式编程之策略模式(上)
- · Delphi模式编程之策略模式(下)
- · 在Delphi7中调试COM+
- · 简单工厂模式(Simple Factory Pattern)Delphi代码
- · 非COM环境下的接口编程--问题,技巧,应用(一)
- · 在Delphi中如何维护COM+的状态信息
- · 非COM环境下的接口编程--问题,技巧,应用(二)
- · Delphi背后---初学者参考之二(1)
