怎样改变图象的实际尺寸以及分辨率?(100分)

  • 主题发起人 主题发起人 Mr-cure
  • 开始时间 开始时间
M

Mr-cure

Unregistered / Unconfirmed
GUEST, unregistred user!
我做扫描仪程序,可是扫下来的图片都很大,
所以我想自己做程序改变图象的实际尺寸。
还需要设置图象的分辨率。

有什么控件或者代码么?最好是代码!
谢谢!

 
aip函数StretchBlt()
 
用TBitmap.Width及Height试一试。
 
用canvas.copyrect()试试,记住rect的大小不同。
 
位图转化为16*16
var
image1 : TPicture ;
begin
Image1 := TPicture.Create;
Image1.LoadFromFile(Filename);
if Pos('.BMP', Uppercase(FileName))>0 then
Image1.Bitmap.Handle := CopyImage(Image1.Bitmap.Handle, Image_Bitmap,16, 16, Lr_CopyDeleteOrg)
else
Image1.Icon.Handle := CopyImage(Image1.Icon.Handle, Image_Icon, 16, 16,Lr_CopyDeleteOrg);
end;
 
除了专业图形软件(外部)或用VC(内部),否则没办法.
 
是扫描后调整大小么?如是,则:
var
Bmp1,Bmp2:TBitmap;//Bmp1是提取扫描的图,Bmp2是变化为宽100的小图
begin
Bmp1=TBitmap.create;
Bmp2=TBitmap.create;
Bmp1.LoadFromFile('...');
Bmp2.PixelFormat =Bmp1.PixelFormat ;
Bmp2.Width=100;
Bmp2.Height =round(Bmp2.Width*Bmp1.Height/Bmp1.Width);
Bmp2.Canvas.StretchDraw(Bounds(0,0, Bmp2.Width,Bmp2.Height),
Bmp1);
Bmp2.SaveToFile('d://temp.bmp');
end;

以上程序是随手写的,只是说明用法:)
 
urus: 你提供的函数我试过了,大小可以改变。但是图形缩小后模糊不清。
不过实在不行的话也许只能这样了。

artx: 你的方法我试了,好象不行。

另外:图象的分辨率怎么改?

我觉得拿程序做好象既改分辨率又改大小还要清晰度 似乎不大可能。所以诸位有没有
比较好的扫描仪控件。我只找到EZTWAIN和MULITTWAIN, 在大富翁控件库里找到的。
有没有别的?
 
Mr-cure,是哪里出错?
我试了后是对的。
Bmp2.SaveToFile('d://temp.bmp'); 应改为
Bmp2.SaveToFile('d:/temp.bmp');
这个程序能保证图像缩小后同样清晰!
有问题我就发原码给你!
 
怎么可能同样清晰呢?
细微之处肯定会锯齿。
使用某种算法可能会得到比较理想的效果。比如lanczos。。。。
 
artx:都怪我自作聪明,看了strechdraw的help后,把你的那个bounds改成了rect。
导致了生成的图片一片漆黑。
我刚才试着还是用bounds了,效果真不错!
谢谢!

剩下的就是分辨率的问题了!如果扫出的图片分辨率低于300,那就不管了,如果高于,就得改到300.
 
wint,我所说的同样清晰是指缩小后不会起锯齿,图像不会花(若用copyrect则图像质量很花),肉眼观察效果同样好;你所说的属于无级缩放算法,如Mitchell、Lanczos、Bell等等,效果很好,但速度慢,若只是用于缩小,则用StretchDraw就能达到较好的效果了。^_^
 
分辨率的问题我改 TWAIN的DLL源程序搞定了。但是昨天没有发现的一个问题。

就是用artx的方法把图片缩小后,图片的分辨率缩小为72dpi,我后来试验了一
下,好像是Tbitmap.create出来的bmp分辨率都是72dpi.请问怎么改到300dpi阿?
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部