难题!bitblt(100分)

  • 主题发起人 主题发起人 ll710915
  • 开始时间 开始时间
L

ll710915

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用bitblt实现图象左移20个象素该如何填写参数?
 
用下面这个过程可以完成:<br>procedure BmpRight20(Source: TBitmap); //Source为想要左移的位图,返回结果也在这<br>var<br>&nbsp; TempBmp: TBitmap;<br>begin<br>&nbsp; TempBmp := TBitmap.Create; //临时对象<br>&nbsp; try<br>&nbsp; &nbsp; TempBmp.Assign(Source); &nbsp;<br>&nbsp; &nbsp; Bitblt(TempBmp.Canvas.Handle, 0, 0, Source.Width - 20, Source.Height,<br>&nbsp; &nbsp; &nbsp; Source.Canvas.Handle, 20, 0, SRCCOPY); &nbsp;//复制20象素右边的图像<br>&nbsp; &nbsp; Bitblt(TempBmp.Canvas.Handle, Source.Width - 20, 0, 20, Source.Height,<br>&nbsp; &nbsp; &nbsp; Source.Canvas.Handle, 0, 0, SRCCOPY); &nbsp;//复制左边20素的图像<br>&nbsp; &nbsp; Source.Assign(TempBmp); &nbsp;//传回给原对象<br>&nbsp; finally<br>&nbsp; &nbsp; TempBmp.Free;<br>&nbsp; end;<br>end;<br><br>
 
我的意思是:我在image控件中绘制了一直线,想用bitblt来实现它的实时移动,<br>即绘制实时曲线,如何?而不是对位图的移动,是图形的移动
 
Bitblt函数(位块传输)用于图像块数据传输,如果你想做个象“系统监视器”那样的界面,<br>我想可以用下面几种方法:<br>1、用我上面写的方法,只不过在移动已有块后,在空余部分画上新图像,它不适合有<br>背景的场合(“系统监视器”应该是用的这种方法)<br>2、保留一个纯背景的位图,每次重绘时都在背景上绘制曲线,再显示出来。<br>3、画曲线时用XOR方式,更新时先XOR旧图像,再用XOR画新图像。<br>4、用类似图层的方法,分别绘制背景和前景,再用Alpha混合(复杂)。
 
多人接受答案了。
 
后退
顶部