图像格式为jpg和gif,客户要求是:得到图像的高度和宽度,然后比较两者的值,将较大的一个设为100,另一个按比例缩小,最后另存为gif格式,因为以前没做过图像方面的东西,所以请高手指点。

解决方案 »

  1.   

    另外为什么我这句话执行的时候报错呢:
    if OpenDialog1.Execute then Image1.Picture.LoadFromFile(OpenDialog1.FileName);
    提示错误是:Unknown picture file extension (.jpg)
    我选的jpg文件啊
      

  2.   

    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;
      

  3.   

    USES
    JPEG以后,CREATE一个JPEG实例,然后载入图片,最后和BITMAP关联
      

  4.   

    缩放如果使用image的strech属性的话就转化为缩放image控件的大小了(当strech属性为true的时候,图片充满image控件)
      

  5.   

    楼上的,你的方法只能改变图像显示大小,无法改变图片大小的
    虽然已经预料到人气不会旺,但还是很郁闷,真要对delphi版失望了
      

  6.   

    >>你的方法只能改变图像显示大小,无法改变图片大小的
    本质上是一回事,改变图像大小就把缩小的图像画到DIB上,而非DDBGDI都是同一个StretchBlt其实大学本科阶段的课本里包括了做图像放缩所需要的全部知识,能靠自己领悟出实现思路也不是问题
      

  7.   

    其实发贴当天我就找到处理方法了,我用了一段bmp缩放代码,先把要处理的文件批量转换为bmp文件,然后执行我的程序进行缩放,最后批量转为gif文件,但这样做失真太厉害,原来的线转换完就成立一些点,客户不满意,所以还是求jpg和gif缩放的源码,一个100,豁出去了
      

  8.   

    所以还是求jpg和gif缩放的源码,一个100,解决了另开贴送分
      

  9.   

    问题不难,关键你缺乏必要基础,而且还未掌握如何使用google,MSDN等.重取样都是针对位图的,说白了就是矩阵放缩.如果用StretchBlt,还有个API SetStretchBltMode可用,它可以改变StretchBlt的放缩模式,具体可查MSDN如果使用GDI+,可以使用的重取方式就更多了,不过也只是线性重取样.效果一般.自己写,可以使用的方法就更多了.不过有些是受专利保护的,实现细节难搞清楚.jpeg->gif还涉及到24位色量化成8位色的问题,网上也很容易找到现成方法,用八叉树做色彩量化生成调色板.然后查找调色板得到最接近颜色配合抖动算法实现色彩转换.效果还行就是效率稍差.利用网上能找到的资料可以基本实现你的要求,想做的完善,只能自己研究摸索.
      

  10.   

    不抱希望了
    无法从楼上楼上楼上牛人的话中学到任何东西,对这方面懂的太少,讲的又太深
    jpg的优化缩放我也实现了,只差gif的算法了