问题一:
procedure TBmp_F.btn1Click(Sender: TObject);
var
MyRect : TRect;
Bitmap: TBitmap;
begin
MyRect := Rect(0,0,100,100);
Bitmap := TBitmap.Create;
Bitmap.Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
img2.Picture.Bitmap := Bitmap;
end;这样子将img1的MyRect区域显示到img2吗? 显示不了啊
要怎么做?问题二:
procedure TBmp_F.btn1Click(Sender: TObject);
var
MyRect : TRect;
Bitmap: TBitmap;
begin
MyRect := Rect(0,0,100,100);
Bitmap := TBitmap.Create;
img2.Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
end;这段代码将img1的相关区域COPY到了img2里了。但是img2里没有填充图像的地方全都是白色的。显然不合理。
要怎么弄?问题三:
谁可以告诉我Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
以上函数的三个参数分别代码什么意思?
canvas.CopyRect只有这几个参数吗?
procedure TBmp_F.btn1Click(Sender: TObject);
var
MyRect : TRect;
Bitmap: TBitmap;
begin
MyRect := Rect(0,0,100,100);
Bitmap := TBitmap.Create;
Bitmap.Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
img2.Picture.Bitmap := Bitmap;
end;这样子将img1的MyRect区域显示到img2吗? 显示不了啊
要怎么做?问题二:
procedure TBmp_F.btn1Click(Sender: TObject);
var
MyRect : TRect;
Bitmap: TBitmap;
begin
MyRect := Rect(0,0,100,100);
Bitmap := TBitmap.Create;
img2.Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
end;这段代码将img1的相关区域COPY到了img2里了。但是img2里没有填充图像的地方全都是白色的。显然不合理。
要怎么弄?问题三:
谁可以告诉我Canvas.CopyRect(MyRect,img1.Canvas,MyRect);
以上函数的三个参数分别代码什么意思?
canvas.CopyRect只有这几个参数吗?
解决方案 »
- 救命啊,在线等!!!
- 回答了<自认在OOP方面有造诣的请进>问题的请进来领分,闲人勿进<一>
- 在C/S下,这个功能怎样实现??
- 我用clientdataset去修改一个记录,为什么修改不成功呢
- 难道就没有DLL高手了吗??? 奇怪......(分可加呀!!!就算穷家当产)
- 如何获得内嵌存储过程返回的数据集
- 请教:怎样读取同一个文件中的不同结构
- 在DELPHI中怎么样调试MTS\COM+服务器端的组件?
- 比较基本的问题,怎么样让代码折行(一行里太长,在下一行显示)?
- 如何修改Listview,ListBox选中项目的颜色,这个一般由windows外观控制?
- ShellExecute返回错误值,为什么GetLastError返回0
- 关于Indy的问题
var
tmp: TBitmap;
dstRect, srcRect: TRect;
ScaleX, ScaleY: Single;
begin
// 如果Image1.Picture.Graphic不是TBitmap,Image1.Canvas是不可使用的,所以作拷贝
tmp := TBitmap.Create;
tmp.Assign(Image1.Picture.Graphic);
// 因为Image显示的与实际Bitmap不见得一致,所以必须对选择矩形进行缩放
ScaleX := tmp.Width / Image1.Width;
ScaleY := tmp.Height / Image1.Height;
srcRect := Rect(Trunc(ScaleX * CutRect.Left),
Trunc(ScaleY * CutRect.Top),
Round(ScaleX * CutRect.Right),
Round(ScaleY * CutRect.Bottom));
dstRect := srcRect;
OffsetRect(dstRect, -dstRect.Left, -dstRect.Top);
Image2.Picture.Bitmap.Width := dstRect.Right;
Image2.Picture.Bitmap.Height := dstRect.Bottom;
// 参数:目标矩形,源画布,原矩形
Image2.Canvas.CopyRect(dstRect, tmp.Canvas, srcRect);
tmp.Free;
end;调用:CopyCutRect(Rect(0, 0, 100, 100);
procedure TForm1.Button1Click(Sender: TObject);
begin
image2.Canvas.CopyRect(Rect(0,0,image2.Width,image2.Height),
image1.Canvas,Rect(0,0,image2.Width,image2.Height));
end;
但这只是在image1的picture为bmp的时候适用,jpg的时候报错(Can only modify an image if it contains a bitmap.),其他格式未知,另外当image1使用stretch为true的时候,image2的copyrect的实际显示可能有出入,因为image1经过了缩放,取消stretch的true属性可以一目了然,或者可将image的坐标转换为form的相对坐标来处理合适点,并且在form下处理jpg和bmp都是可以的
procedure TForm1.Button1Click(Sender: TObject);
begin
Image2.Canvas.CopyRect(Rect(0,0,image2.Width,image2.Height),
form1.Canvas,Rect(image1.Left,image1.top,image1.Left+image1.width,image1.top+image1.Height))
end;2、参考上面13、Canvas.CopyRect大概意思:
procedure TCanvas.CopyRect(const Dest: TRect; Canvas: TCanvas;
const Source: TRect);
意思是说:是指把Canvas画布中的Source区域的内容复制到Dest