两张图片:一个bmp,一个Mask的绘制方法
2015-09-08 13:24
387 查看
可以用ps蒙板来实现,用代码也可以:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, PngImage;
type
TForm1 = class(TForm)
ImageBmp: TImage;
ImageBmpMask: TImage;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBuffPng: TPNGObject;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, J: Integer;
LSourceAlphaAry: pByteArray;
begin
FBuffPng := TPNGObject.Create;
SetPngSize(ImageBmp.Width, ImageBmp.Height, FBuffPng);
for J := 0 to FBuffPng.Height - 1 do
begin
LSourceAlphaAry := FBuffPng.AlphaScanline[J];
if Assigned(LSourceAlphaAry) then
begin
for I := 0 to FBuffPng.Width - 1 do
begin
FBuffPng.Pixels[I, J] := ImageBmp.Canvas.Pixels[I, J];
LSourceAlphaAry[I] := (ImageBmpMask.Canvas.Pixels[I, J] and $FF);
end;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FBuffPng);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, FBuffPng);
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, PngImage;
type
TForm1 = class(TForm)
ImageBmp: TImage;
ImageBmpMask: TImage;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBuffPng: TPNGObject;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, J: Integer;
LSourceAlphaAry: pByteArray;
begin
FBuffPng := TPNGObject.Create;
SetPngSize(ImageBmp.Width, ImageBmp.Height, FBuffPng);
for J := 0 to FBuffPng.Height - 1 do
begin
LSourceAlphaAry := FBuffPng.AlphaScanline[J];
if Assigned(LSourceAlphaAry) then
begin
for I := 0 to FBuffPng.Width - 1 do
begin
FBuffPng.Pixels[I, J] := ImageBmp.Canvas.Pixels[I, J];
LSourceAlphaAry[I] := (ImageBmpMask.Canvas.Pixels[I, J] and $FF);
end;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FBuffPng);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, FBuffPng);
end;
end.
相关文章推荐
- hdu-5429(大数java练习)
- ContentType是否大小写区分?
- poj 1149 最大流经典建图
- VB+DX游戏编程教程 第四话:多彩的纹理
- Python 之 使用 PIL 库做图像处理
- Android内存泄露案例分析(内存分析工具DDMS和MAT工具)
- delphi用mdb
- 前端面试题系列
- Oracle RAC中的scan ip 的用途和基本原理
- int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [3]”转换为“size_t”
- 多线程下的随机数初始化 srand()
- Qt 用到的函数(持续更新中)
- 编译器合成的拷贝构造函数
- LaTeX 简介与安装
- php验证码注意事项
- LaTeX 简介与安装
- 修改HTTP Post/get数据利器TamperIE
- 【原创】工控机安装Ubuntu系统,直接断电然后再上电时,系统停留在启动项位置等待选择的处理方法
- javascritpt 原型链
- ctrl 命令