delphi高手能帮我解释一下这段语句的具体含义嘛?谢谢啦啊
procedureTForm1.Button1Click(Sender:TObject);//vari,j:Integer;begin//i:=GetTickCount;...
procedure TForm1.Button1Click(Sender: TObject);
// var i,j : Integer ;
begin
//i:=GetTickCount;
Image3.Picture:= Image2.Picture;
// for j:=0 to 99 do
CBmp.BlendPic(Image1.Picture.Bitmap.Handle,Image2.Picture.Bitmap.Handle,
Image3.Picture.Bitmap.Canvas.Handle ,TrackBar1.Position );
// form1.Caption:=inttostr(GetTickCount-i);
end;
特别是这一句
CBmp.BlendPic(Image1.Picture.Bitmap.Handle,Image2.Picture.Bitmap.Handle,
Image3.Picture.Bitmap.Canvas.Handle ,TrackBar1.Position );
谢谢啦··· 展开
// var i,j : Integer ;
begin
//i:=GetTickCount;
Image3.Picture:= Image2.Picture;
// for j:=0 to 99 do
CBmp.BlendPic(Image1.Picture.Bitmap.Handle,Image2.Picture.Bitmap.Handle,
Image3.Picture.Bitmap.Canvas.Handle ,TrackBar1.Position );
// form1.Caption:=inttostr(GetTickCount-i);
end;
特别是这一句
CBmp.BlendPic(Image1.Picture.Bitmap.Handle,Image2.Picture.Bitmap.Handle,
Image3.Picture.Bitmap.Canvas.Handle ,TrackBar1.Position );
谢谢啦··· 展开
3个回答
展开全部
我这一个自己写的类的。不是Delphi带的。根据TrackBar1.Position的值实现半透明处理。
procedure BlendPic(hBmp,hBmp2,hDC,Proportion :Integer);
var x,y : Integer;
Line,Line2: PLine;
p,p2:Single;
begin
CreateFromhWnd(hBmp,hBmp2);
GetMem(Line,Width*3);
GetMem(Line2,Width*3);
p2:= Proportion/5;
p:=2-p2;
for y:=0 to Height-1 do
begin
GetScanLine(y,Line,Line2);
for x:=0 to Width-1 do
begin
Line^[x].r:= Trunc((Line^[x].r*p + Line2^[x].r*p2) / 2) ;
Line^[x].g:= Trunc((Line^[x].g*p + Line2^[x].g*p2) / 2 ) ;
Line^[x].b:= Trunc((Line^[x].b*p + Line2^[x].b*p2) / 2 ) ;
end;
SetLine(y,Line,Line2);
end;
FreeMem(Line,Width*3); //释放内存
FreeMem(Line2,Width*3);
SetDIBitsToDevice(hDC, //设备场景的句柄。该场景用于接收位图数据
0,0, //用逻辑坐标表示的目标矩形的起点
Width,Height, //用目标矩形的设备单位表示的宽度及高度
0,0, //用设备坐标表示的源矩形在DIB中的起点
0, //Bits数组中第一条扫描线的编号。
Height, //欲复制的扫描线数量
Bits , //指向一个缓冲区的指针
BmpInfo, //BITMAPINFO,对Bits DIB的格式和颜色进行描述的一个结构
DIB_RGB_COLORS); //颜色表包含了RGB颜色
DeleteObject(Handle); //删除GDI对象
DeleteObject(Handle2);
end;
procedure BlendPic(hBmp,hBmp2,hDC,Proportion :Integer);
var x,y : Integer;
Line,Line2: PLine;
p,p2:Single;
begin
CreateFromhWnd(hBmp,hBmp2);
GetMem(Line,Width*3);
GetMem(Line2,Width*3);
p2:= Proportion/5;
p:=2-p2;
for y:=0 to Height-1 do
begin
GetScanLine(y,Line,Line2);
for x:=0 to Width-1 do
begin
Line^[x].r:= Trunc((Line^[x].r*p + Line2^[x].r*p2) / 2) ;
Line^[x].g:= Trunc((Line^[x].g*p + Line2^[x].g*p2) / 2 ) ;
Line^[x].b:= Trunc((Line^[x].b*p + Line2^[x].b*p2) / 2 ) ;
end;
SetLine(y,Line,Line2);
end;
FreeMem(Line,Width*3); //释放内存
FreeMem(Line2,Width*3);
SetDIBitsToDevice(hDC, //设备场景的句柄。该场景用于接收位图数据
0,0, //用逻辑坐标表示的目标矩形的起点
Width,Height, //用目标矩形的设备单位表示的宽度及高度
0,0, //用设备坐标表示的源矩形在DIB中的起点
0, //Bits数组中第一条扫描线的编号。
Height, //欲复制的扫描线数量
Bits , //指向一个缓冲区的指针
BmpInfo, //BITMAPINFO,对Bits DIB的格式和颜色进行描述的一个结构
DIB_RGB_COLORS); //颜色表包含了RGB颜色
DeleteObject(Handle); //删除GDI对象
DeleteObject(Handle2);
end;
展开全部
//GetTickCount 返回从操作系统启动到当前所经过的毫秒数
Image3.Picture:= Image2.Picture; 在image3控件中取得image2的图片
CBmp.BlendPic 好像弄颜色的吧,透明?混合?
Image3.Picture:= Image2.Picture; 在image3控件中取得image2的图片
CBmp.BlendPic 好像弄颜色的吧,透明?混合?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CBmp应该是一个第三方控件或自定义类型,BlendPic只是他的一个方法,按这方法的名字和传递参数看,功能应该是两张图片,按进度条进行融合分离。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询