问题不难,但是我以前没做过:图像按比例缩放问题

hellolongbin 2005-02-23 05:00:57
图像格式为jpg和gif,客户要求是:得到图像的高度和宽度,然后比较两者的值,将较大的一个设为100,另一个按比例缩小,最后另存为gif格式,因为以前没做过图像方面的东西,所以请高手指点。
...全文
281 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellolongbin 2005-03-08
  • 打赏
  • 举报
回复
顶1
hellolongbin 2005-03-08
  • 打赏
  • 举报
回复
这分让我怎么给呢?
hellolongbin 2005-02-28
  • 打赏
  • 举报
回复
不抱希望了
无法从楼上楼上楼上牛人的话中学到任何东西,对这方面懂的太少,讲的又太深
jpg的优化缩放我也实现了,只差gif的算法了
Allblus 2005-02-28
  • 打赏
  • 举报
回复
BMP缩放还是容易找到。
herman~~ 2005-02-25
  • 打赏
  • 举报
回复
楼上牛人
ehom 2005-02-25
  • 打赏
  • 举报
回复
问题不难,关键你缺乏必要基础,而且还未掌握如何使用google,MSDN等.

重取样都是针对位图的,说白了就是矩阵放缩.

如果用StretchBlt,还有个API SetStretchBltMode可用,它可以改变StretchBlt的放缩模式,具体可查MSDN

如果使用GDI+,可以使用的重取方式就更多了,不过也只是线性重取样.效果一般.自己写,可以使用的方法就更多了.不过有些是受专利保护的,实现细节难搞清楚.

jpeg->gif还涉及到24位色量化成8位色的问题,网上也很容易找到现成方法,用八叉树做色彩量化生成调色板.然后查找调色板得到最接近颜色配合抖动算法实现色彩转换.效果还行就是效率稍差.

利用网上能找到的资料可以基本实现你的要求,想做的完善,只能自己研究摸索.
hellolongbin 2005-02-25
  • 打赏
  • 举报
回复
所以还是求jpg和gif缩放的源码,一个100,解决了另开贴送分
hellolongbin 2005-02-25
  • 打赏
  • 举报
回复
其实发贴当天我就找到处理方法了,我用了一段bmp缩放代码,先把要处理的文件批量转换为bmp文件,然后执行我的程序进行缩放,最后批量转为gif文件,但这样做失真太厉害,原来的线转换完就成立一些点,客户不满意,所以还是求jpg和gif缩放的源码,一个100,豁出去了
hellolongbin 2005-02-25
  • 打赏
  • 举报
回复

还是不懂

这个问题很难么?
ehom 2005-02-24
  • 打赏
  • 举报
回复
>>你的方法只能改变图像显示大小,无法改变图片大小的
本质上是一回事,改变图像大小就把缩小的图像画到DIB上,而非DDB

GDI都是同一个StretchBlt

其实大学本科阶段的课本里包括了做图像放缩所需要的全部知识,能靠自己领悟出实现思路也不是问题
YAMABACK 2005-02-24
  • 打赏
  • 举报
回复
缩放如果使用image的strech属性的话就转化为缩放image控件的大小了(当strech属性为true的时候,图片充满image控件)
hellolongbin 2005-02-24
  • 打赏
  • 举报
回复
晕死我了,人呢???????
hellolongbin 2005-02-24
  • 打赏
  • 举报
回复
没有高手在么?急啊!!!
hellolongbin 2005-02-24
  • 打赏
  • 举报
回复
动态载入的问题已经解决了,继续期待缩放问题解决方法,分少可以另开贴再送,我不是小气的人,虽然可用分一直没上过300
糖醋鼻子 2005-02-24
  • 打赏
  • 举报
回复
USES
JPEG以后,CREATE一个JPEG实例,然后载入图片,最后和BITMAP关联
火猴 2005-02-24
  • 打赏
  • 举报
回复
jpg的大小在文件头里面有,下面是我读取bmp文件的宽和高的代码, 你找jpg文件头的格式,把位置替换成jpg的位置就可以了
Procedure TMyPicture.GetFileInfo();
var
Ori: TFileStream;
buffer:LongInt;
begin
buffer:=0;
Ori := TFileStream.Create(mpFilePath, fmOpenRead);
//读宽度
Ori.Seek(18, soFromBeginning);
Ori.Read(buffer,4);
mpWidth:= buffer;
//读高度
buffer:=0;
Ori.Seek(22, soFromBeginning);
Ori.Read(buffer,4);
mpHeight:=buffer;
//读bit数
buffer:=0;
Ori.Seek(28, soFromBeginning);
Ori.Read(buffer,2);
mpBitCount:=buffer;

FreeAndNil(Ori);
end;
火猴 2005-02-24
  • 打赏
  • 举报
回复
加入单元jpeg即可
hellolongbin 2005-02-24
  • 打赏
  • 举报
回复
没有人看到么?
hellolongbin 2005-02-24
  • 打赏
  • 举报
回复
楼上的,你的方法只能改变图像显示大小,无法改变图片大小的
虽然已经预料到人气不会旺,但还是很郁闷,真要对delphi版失望了
hellolongbin 2005-02-23
  • 打赏
  • 举报
回复
另外为什么我这句话执行的时候报错呢:
if OpenDialog1.Execute then Image1.Picture.LoadFromFile(OpenDialog1.FileName);
提示错误是:Unknown picture file extension (.jpg)
我选的jpg文件啊

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧