类型:转载 责任编辑:asp 日期:2007/03/01
为什么用
image1->canvas->copyrect(rect(0....),bmpbuffer->canvas->handle,rect(0....));
就可以。
而使用
bitblt(image1->cavas->handle,0,0,x,y,bmpbuffer->canvas->handle,0,0,srccopy);
就什么也画不出来?
因为对速度有一定要求,所以我希望使用bitblt().
tcanvas->copyrect()用的是stretchblt(),让我觉得不是很舒服。
推荐阅读
真的不行吗?好象没有什么问题啊!!
实在不行,你就用回tcanvas->copyrect()用的是stretchblt()吧!!!
没有问题,测试代码如下:
graphics::tbitmap *bmpbuffer = new graphics::tbitmap();
bmpbuffer->loadfromfile("d:\\a.bmp");
bitblt(image1->canvas->handle,0,0,200,200,bmpbuffer->canvas->handle,0,0,srccopy);
delete bmpbuffer;
两个都能行!
只是一个有拉伸而已
好好试试!
你为什么用copyrect呢,你可以创建一个后备bmp做buffer,然后直接canvas->draw(0,0,bmp);就可以了。
copyrect是这样实现的:
changing;
requiredstate([cshandlevalid, csfontvalid, csbrushvalid]);
canvas.requiredstate([cshandlevalid, csbrushvalid]);
stretchblt(fhandle, dest.left, dest., dest.right - dest.left,
dest.bottom - dest., canvas.fhandle, source.left, source.,
source.right - source.left, source.bottom - source., copymode);
changed;
在你上面的函数最后加上下面2行就可以了。
trect rect = image1->boundsrect;
invalidaterect(image1->parent->handle, &rect, 0);
其实只要再加一个image1->parent->doublebuffered = true;
就不会闪了
就是调用image1->repaint() 也行
xuv2002(xuwei) 说的应该是正确的!
.