本人在写一个照片剪切程序,用image1显示直接从数码相机
取过来的Jpg格式的图片,再在image1上放了一个Shape做取
景框,把Shape套着的图片CopyRect到image2.
原本想用
Image2.Canvas.CopyRect(image2.ClientRect,image1.picture.bitmap.Canvas,image1Rect)
发现用CopyRect不能对Jpg的图像作操作,后来就用了一个取巧的方法。
Image2.Canvas.CopyRect(image2.ClientRect,Form1.Canvas,image1Rect)
这样照片是剪过来了,但是我发现这样过来的图片的质量明显比源图差,
简直是惨不忍暏。
我想问
1质量明显比源图差的原因是因为我用了Form1.Canvas的原因吗?
如果不是,那又因为什么?
2如何直接剪切Jpg的图像而无损质量。
取过来的Jpg格式的图片,再在image1上放了一个Shape做取
景框,把Shape套着的图片CopyRect到image2.
原本想用
Image2.Canvas.CopyRect(image2.ClientRect,image1.picture.bitmap.Canvas,image1Rect)
发现用CopyRect不能对Jpg的图像作操作,后来就用了一个取巧的方法。
Image2.Canvas.CopyRect(image2.ClientRect,Form1.Canvas,image1Rect)
这样照片是剪过来了,但是我发现这样过来的图片的质量明显比源图差,
简直是惨不忍暏。
我想问
1质量明显比源图差的原因是因为我用了Form1.Canvas的原因吗?
如果不是,那又因为什么?
2如何直接剪切Jpg的图像而无损质量。
var
Bitmap: TBitmap;
MyRect, MyOther: TRect;
begin
MyRect := Rect(10,10,100,100);
MyOther := Rect(10,111,100, 201);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('c:\n.bmp');
Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect); //为什么用Form1.Canvas.CopyRect
image1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect); //而用image1.Canvas.CopyRect不可以
Bitmap.Free;
end;
我想应该是。你用别的控件试试,好象有一个叫JPEGIMAGE的,我没试过,我改用BMP格式了。
至于质量差的原因是不是你用了进行了缩放了,当然质量要变差了,
还有再copyrect之前加上一个api函数
SetStretchBltMode(Form1.Canvas->Handle,COLORONCOLOR);
它会对你缩放的图片质量有所改善的.
定义一个临时Tbitmap,对它进行操作。procedure TForm1.Button1Click(Sender: TObject);
var
// jpg:TJPEGImage;
tmpBitmap:TBitmap;
rt:TRect;
begin
// jpg:=TJPEGImage.Create ;
// jpg.Assign(Image1.Picture.Graphic);
SetRect(rt,0,0 ,Image1.BoundsRect.Right -Image1.BoundsRect.Left ,
Image1.BoundsRect.Bottom - Image1.BoundsRect.Top );
TmpBitmap:=TBitmap.Create ;
TmpBitmap.Assign(Image1.Picture.Graphic);
Image2.Height :=rt.Bottom ;
Image2.Width :=rt.Right ;
Image2.Canvas.CopyRect(rt ,TmpBitmap.Canvas,rt);
Image2.Repaint;
end;