首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急一个在TBitmap上画图的有关问题

2012-02-04 
急!急!急!!!一个在TBitmap上画图的问题!项目需要 我现在有一个TImage控件放在一个TPanel上,TImage上面已经

急!急!急!!!一个在TBitmap上画图的问题!
项目需要 我现在有一个TImage控件放在一个TPanel上,TImage上面已经load一张图片进来 我现在要达到这样的效果,
在图片区域内点鼠标左键然后按住左键拖动 而且仅限向右下拖动有效,会出现一个空心的虚线矩形框 画这个矩形并不影响下边的图片 可以随意拖动 当松开鼠标左键 则矩形消失,图片和没有画矩形前一样。也就是说不能影响图片 画这个矩形只是临时的随画随擦。我现在画线是可以画 但一是擦不干净 二图片被破坏了 画过矩形的地方都成了白色 

找了好久没有合适的解决方案 希望高手们帮忙 分不够我再加!因为是项目时间很紧,所以最好能有代码例子,谢谢大家!  


[解决办法]
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, 
Y: Integer); 
begin 
if (Shift = [ssLeft]) and (X > StartP.X) and (Y > StartP.Y) then 
begin 
Shape1.Left := StartP.X; 
Shape1.Top := StartP.Y; 
Shape1.Width := X - StartP.X; 
Shape1.Height := Y - StartP.Y; 
end 
else 
begin 
Shape1.Width := 0; 
Shape1.Height := 0; 
end; 
end; 
这行代码中的
Shape1.Left := StartP.X; 
Shape1.Top := StartP.Y; 
应该为:
Shape1.Left := StartP.X + Image1.Left; // 你的为Panel1.Left;
Shape1.Top := StartP.Y + Image.Top; //你的为Panel1.Top;
[解决办法]
重新给TImage.Picture.Bitmap赋值的话速度会有点慢,最好之前将你的bitmap 先加载到一个TBitmap类型的变量(TmpBmp)里,用Img.Canvas.StretchDraw(Rt, TmpBmp);




画矩形就用Img.Canvas.Rectangle就可以了。

热点排行