取得图片的透明区域

原创 2004年03月25日 17:13:00
(*//
标题:取得图片的透明区域
说明:适用于制作复杂的不规则窗体
设计: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;

【Unity&NGUI】PS裁剪UI把部分图片留着透明的部分&新建图集&调整NGUI的Sprite大小

做项目建立了一个新的UI,该怎么应用到场景视图中呢 ---------------------PS裁剪UI把部分图片留着透明的部分 打开画图,新建一个.PNG文件,使用相应的工具画圆 ...
  • BuladeMian
  • BuladeMian
  • 2017年02月15日 11:52
  • 1143

AS3 如何让鼠标不响应透明区域

废话不多说 ,直接上代码 /** * 单像素检测 * @return * */ public function hitTestPoint(dis:DisplayO...
  • gzyshengongshe
  • gzyshengongshe
  • 2014年08月28日 20:18
  • 1024

图片区域透明

绘制半透明位图 有的时侯,我们希望显示一幅半透明的位图。也就是说我们将一幅位图b 显示到a位图上,又希望透过b位图看到a位图的一部分图像但不是全部。比如a位 图是一幅曲线图,b是一幅提示...
  • gh2663287
  • gh2663287
  • 2015年06月24日 16:30
  • 897

Opencv for Unity去除离散区域

老规矩,先看效果图: 如图所示,图上有一些离散的区域,需要将这些区域找到并去除,还要将透明通道图的毛刺边缘做平滑处理。实现思路是这样的: 拿到图的Alpha通道,利用Core....
  • thinkcg
  • thinkcg
  • 2017年07月25日 12:47
  • 562

java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java处理图像。一般图像处理python用的比较多,感觉网上关于java处理图像的资料不是很多(也许是因为我没有认真的去翻吧……)所以想...
  • AlexZhang67
  • AlexZhang67
  • 2016年07月25日 21:23
  • 2529

如何使用Photoshop(PS)将图片的底色变为透明

很多时候需要将一张图片的底色变得透明。本文描述了使用PS将图片的一部分变得透明的方法。本例将一段艺术字的背景去掉,将背景透明的文字单独保存成图片,这样以后将这段文字粘贴到其他素材上的时候,就不用担心它...
  • zsj523
  • zsj523
  • 2015年01月20日 17:51
  • 7872

iOS实现UIImageView透明区域点击事件穿透(OC&swift)

问题 最近要在iPad上实现一个很独特的功能,简单描述一下就是要显示一个带有半透明背景的弹出界面,在其上加一个不规则形状的图片,手指点击这个弹出界面的半透明区域就退出这个弹出界面。 问题是UED/...
  • songchunmin_
  • songchunmin_
  • 2016年04月25日 20:59
  • 1471

opencv处理透明图片

opencv处理透明图片opencv处理透明图片,主要是考虑图片的叠加。//主函数操作 ... Mat dest,srcAlpha;// imread后一个参数为-1表示读取带有alpha通道的图片 ...
  • lonelyrains
  • lonelyrains
  • 2015年12月23日 18:39
  • 6625

iOS实现UIImageView透明区域点击事件穿透

感觉题目改为:不规则图形点击事件的识别 gen
  • ralbatr
  • ralbatr
  • 2014年08月05日 18:00
  • 9860

OpenCV如何实现透明(alpha channel)图像的读取和写入

http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html http://blog....
  • litdaguang
  • litdaguang
  • 2015年05月02日 10:49
  • 3843
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:取得图片的透明区域
举报原因:
原因补充:

(最多只允许输入30个字)