关于图像的缩放(60分)

  • 主题发起人 主题发起人 uboat_57
  • 开始时间 开始时间
U

uboat_57

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用
Image1.Canvas.CopyRect
将一个位于TBitmap中的位图拷入Image1时颜色发生变化,
图像的颜色很难看,与ACDSEE的效果差距很大,
为什么会这样,如何避免,请高手指正。
如何做到ACDSEE那样的效果???
 
Determines in what bit format the bitmap image is displayed.
type TPixelFormat = (pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom);

不知道设置这个属性有没有用
image1.Picture.Bitmap.PixelFormat
你试验一下吧
 
是缩小吗?

加:SetStretchBltMode(image1.Canvas.Handle, HALFTONE);
 
还是达不到理想的效果
有没有专门的函数或控件能达到ACDSEE的缩放效果
 
你用evision image好了,他有个percent属性,可以调节大小,效果绝对好啊
可以到delphi窑洞下载
 
不会的,用copyrect的效果和ACDSEE的缩放效果是一样的,看看你定义的矩形区域是不是长宽比例不一样了
还有Image1的“拉伸”(英文我忘了,写不出来)属性一定要设成FALSE,
我做过一个矢量图程序,里面用到很多
缩放图象的操作,感觉和ACDSEE没有差别,不过比PHOTOSHOP就差远了
 
如果是一次缩放,则问题不大,如果是多次,copyrect就不理想了,
不过你可以备份一个位图,然后用stretchblt ,源图都由备份的图读取,失真会较小
 
当然是缩小,由400*300的源复制到200*150的目标位置

好难看。我也想知道怎么搞。想用逐点扫描法,不过可能效率不行
 
看到一篇使用视频函数对位图缩放的文章
可以考虑一下
 
timage有缩放的性质
image1.proportinal:=true;
 
其实自己写一个抽值得 放小算法就行了。构造一个新的小的图
这样就不会有所谓的“锯齿”问题了。其实我想你所说得难看应该就是锯齿了
 
我试了,颜色不会有问题,你能告诉我一下这样以后的坐标变换吗?
procedure TCalibForm.SpeedButton3Click(Sender: TObject);

begin
ImgFilm.Width:=round(ImgFilm.Width/2);
ImgFilm.Height:=round(ImgFilm.Height/2);
ImgFilm.AutoSize:=False;
ImgFilm.Stretch:=True;
ImgFilm.Picture.Assign(ImgFilm.Picture);
end;
 
我写过。 效果不错, 把500*300的图片缩小到8*8还能依稀看出原来的样子。
 
后退
顶部