bitblt函数

sunny906 2009-02-20 07:56:26
把bit1上的位图拷贝给bit2
bit1,bit2分别放在panel1,panel2上,但点button2,却没有图出现
向各位大虾请教,因为我对bitblt函数还不太了解
var
bit1:Tbitmap;
cs1,cs2:Tcanvas;

procedure TForm1.FormCreate(Sender: TObject);
begin
bit1:=tbitmap.Create;
bit1.Width:=panel1.ClientWidth ;
bit1.Height:=panel1.ClientHeight ;

cs1:=Tcanvas.Create;
cs2:=tcanvas.Create;

cs1.Handle:=Getdc(panel1.Handle);
cs2.Handle:=getdc(panel2.Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
bit1.Canvas.Pen.Width:=2;
bit1.Canvas.Pen.Color:=clred;
bit1.Canvas.MoveTo(0,0);
bit1.Canvas.LineTo(10,10);
cs1.Draw(0,0,bit1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
bitblt(cs2.Handle,panel2.Left,panel2.Top,bit1.Width,bit1.Height,bit1.Canvas.Handle,panel1.Top,panel1.Height,SRCCOPY); //感觉这里面的参数我设置的很混乱,怎么设置才是正确的?

end;
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny906 2009-02-21
  • 打赏
  • 举报
回复
还有一个问题就是:
crccopy前面的(0,0)是bit1在cs1.draw(0,0,bit1)里的坐标还是bit1.canvas.moveto(0,0)里的坐标?
谢谢
hbsjz33 2009-02-21
  • 打赏
  • 举报
回复
up
sunny906 2009-02-21
  • 打赏
  • 举报
回复
顶一下
starluck 2009-02-20
  • 打赏
  • 举报
回复
bitblt(cs2.Handle,10,3,bit1.Width,bit1.Height,bit1.Canvas.Handle,0,0,SRCCOPY);


这样看下效果就明白了。 x->10 y->3 之后的效果。
starluck 2009-02-20
  • 打赏
  • 举报
回复
(cs2.Handle,panel2.Left,panel2.Top,bit1.Width,bit1.Height,bit1.Canvas.Handle,panel1.Top,panel1.Height,SRCCOPY); //感


四个点你要找对。

左上角至少应该是 0,0

如果你调成: 10,10 。 这是panel的client区域的X轴坐标
sunny906 2009-02-20
  • 打赏
  • 举报
回复
自己顶一下
sunny906 2009-02-20
  • 打赏
  • 举报
回复
BitBlt(
HDC hdcDest,
int nXDest,
int nYDest,

int nWidth,
int nHeight,
HDC hdcSrc,
int nXSrc,
int nYSrc,

DWORD dwRop);
在函数里这两个坐标分别代表谁的坐标?是不是可以自己任意设置?
结合上面的代码,把button2的单击事件改为:
bitblt(cs2.Handle,0,0,bit1.Width,bit1.Height,bit1.Canvas.Handle,0,0,SRCCOPY);
就可以了
cs2.handle后面的(0,0)是要显示的位图的起始位置吗?
crccopy前面的(0,0)是bit1在cs1.draw(0,0,bit1)的坐标还是bit1.canvas.moveto(0,0)里的坐标;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧