最近在整理代码的时候发现了这个函数,但是原作者是谁我已经不知道了,修正了里面的一个bug,然后把alpha修改为0-255个级别!(原来为10)

 1 procedure DrawAlpha(bmpBack, bmpFore : TBitmap; TransColor : TColor; OffX, OffY : Integer; Alpha : Integer);
 2 
 3 type
 4   TRGBArray = array[0..32767] of TRGBTriple;
 5   PRGBArray = ^TRGBArray;
 6 
 7 var
 8   X, Y     : Integer;
 9   rowFore,
10   rowBack  : PRGBArray;
11 
12 begin
13   // check bitmaps
14   if not Assigned(bmpBack) or
15      not Assigned(bmpFore) then
16    Exit;
17 
18   // check color depth
19   if (bmpFore.PixelFormat <> pf24bit) or
20      (bmpBack.PixelFormat <> pf24bit) then
21    Exit;
22 
23 // check dimensions
24 //  if (bmpFore.Height + OffY > bmpBack.Height) or
25 //     (bmpFore.Width + OffX > bmpBack.Width) then
26 //    Exit;
27 
28   // check alpha value
29   if (Alpha > 255) or
30      (Alpha < 0) then
31     Alpha := 255;
32 
33   for y := 0 to bmpFore.Height - 1 do
34   begin
35     // scan bitmap rows
36     if (y > bmpBack.Width) then
37           Continue;
38     rowBack := bmpBack.ScanLine[y + OffY];
39     rowFore := bmpFore.ScanLine[y];
40     for x := 0 to bmpFore.Width - 1 do
41     begin
42     if (x+offx>bmpBack.Width) then
43           Continue;
44     // if not transparent color
45     if not ((rowFore[x].rgbtRed   = GetRValue(TransColor)) and
46             (rowFore[x].rgbtGreen = GetGValue(TransColor)) and
47             (rowFore[x].rgbtBlue  = GetBValue(TransColor))) then
48     // calculate new pixel value
49     begin
50       rowBack[x + OffX].rgbtRed   := ((rowBack[x + OffX].rgbtRed * (255 - Alpha))   + (rowFore[x].rgbtRed * abs(Alpha-255)))div 255;
51       rowBack[x + OffX].rgbtGreen := ((rowBack[x + OffX].rgbtGreen) * (255 - Alpha) + (rowFore[x].rgbtGreen * Abs(Alpha-255)))div 255;
52       rowBack[x + OffX].rgbtBlue  := ((rowBack[x + OffX].rgbtBlue) * (255 - Alpha)  + (rowFore[x].rgbtBlue * Abs(Alpha-255)))div 255;
53     end;
54   end;
55   end;
56 end;

下面的是使用的例子

 1 procedure TForm1.Button2Click(Sender: TObject);
 2 begin
 3   // set color depth to 16.7mio colors (24 bit)
 4   // because the loaded bitmaps are 8 bit
 5   img1.Picture.Bitmap.PixelFormat := pf24bit;
 6   img2.Picture.Bitmap.PixelFormat := pf24bit;
 7 
 8   DrawAlpha(img1.Picture.Bitmap, img2.Picture.Bitmap, clFuchsia, 10, 10, 5);
 9 
10   // update image1 (result)
11   img1.Invalidate;
12 end;

转载于:https://www.cnblogs.com/sun_catboy/archive/2008/09/16/1291579.html

Delphi绘制Alpha图像的函数相关推荐

  1. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  2. R语言使用persp函数绘制三维图像实战(3D):自定义3D图、图像旋转、添加轴标签

    R语言使用persp函数绘制三维图像实战(3D):自定义3D图.图像旋转.添加轴标签 目录

  3. 用计算机绘制函数图像ppt,ppt中怎么绘制三角函数图像?

    ppt中怎么绘制三角函数图像? 2018-03-16 20:22 责任编辑:砕月 导读 / 教学中我们最常用的莫过于ppt演示文稿了,除了基本的演示功能外,它也可以制作函数图像,如果利用ppt来制作函 ...

  4. python画正切函数_python的pygal模块绘制反正切函数图像方法

    python的pygal模块绘制反正切函数图像方法 python是一个很有趣的语言,可以在命令行窗口运行.python中有很多功能强大的模块,这篇经验告诉你,如何使用python的pygal模块绘制反 ...

  5. python绘制一个简单的函数图像使用到了matplotlib库和numpy库

    文章目录 效果展示: 视频链接 实现的思想 使用到的函数包 图片一对应的代码展示 图片二 对应的代码展示 注意事项 效果展示: 视频链接 python绘制一个简单的函数图像(B站视频) 实现的思想 其 ...

  6. Python-Matplotlib绘制简单图像

    文章目录 1.plot 绘制直线图 2. subplot 子图 绘制直方图 绘制散点图 解决中文无法显示&&负号无法显示的问题 绘制3D图像 热力图 1.plot 绘制直线图 impo ...

  7. 使用matplotlib绘制3D图像时插入图片

    最近学了matplotlib,想要在绘制3D图像的时候插入图片,但在网上找来找去没找到比较好的,唯一找到的一个速度有点慢.于是就自己动手吧. 先放下在stackoverflow看到的答案: # 注释为 ...

  8. 单目标跟踪通过CAM绘制heatmap图像(以SiamCAR为例)

    论文链接: SiamCAR: Siamese Fully Convolutional Classification and Regression for Visual Tracking Group-C ...

  9. Nilearn:绘制大脑图像

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. Nilearn简介 Nilearn使许多先进的机器学习.模式识别和多元统计技术在神经成像数据上的应用变得很容易,如MVPA(Mutli-V ...

最新文章

  1. 支付宝app支付总结
  2. C语言访问内部ROM,C语言随笔2: rom ram 及其运行的过程
  3. guava中的Strings
  4. Eclipse-配置workspace路径
  5. ASP.NET获得客户端浏览器语言设置(Get the Language setting of browser by ASP.NET)
  6. Python调用大漠插件
  7. [ACM] hdu 1285 确定比赛名次 (拓扑排序)
  8. 使用ASP.NET 2.0进行记录错误
  9. CMOS图像传感器——高动态范围
  10. JDK1.8 win10系统 环境变量配置
  11. html5离线缓存使用
  12. Windows下telnet工具使用
  13. 搜索引擎关键字热度估算查询
  14. 查看CPU最大支持内存容量
  15. MySQL----多表查询
  16. 4.7 51单片机-DS1302 实时时钟芯片
  17. GraphX 在图数据库 Nebula Graph 的图计算实践
  18. 2022.04.04树莓派最新镜像问题,树莓派如何设置初始化的账户和密码
  19. [墨者学院] 日志文件分析溯源(脱裤的IP地址)
  20. python自动填表格_Windows下使用python3 + selenium实现网页自动填表功能

热门文章

  1. UML总结—时序图(Sequence Diagram)和协作图(Collaboration Diagram)
  2. golang中的aliyunoss
  3. 算法:不同二叉搜索树||
  4. linux命令tree
  5. 常见排序算法时间复杂度
  6. UDP调用connect
  7. Makefile_06:如果引用其它的 Makefile
  8. redis的string类型和bitmap
  9. spring18-1:采用jdk的动态代理 proxy。
  10. Zookeeper详细参数解析zoo.cfg文件