错误是什么呢?可能这个跟image控件有关系。
毕竟一张3434x4233的BMP图片文件大小都过1M了吧,你的image控件能否承受呢?记得它好象有个什么属性可以调整的,忘了

解决方案 »

  1.   

    不用image控件,以上的只是例子,3434x4233的BMP图片也是举例可能更大!单单是转换,不显示!错误可能是内存不够或死机。但是我用ACDSEE转换则能转换出,还能显示进度!我想ACDSEE不是在内存中转换的把!
      

  2.   

    你是否释放MyJpeg、Image1两个对象,我看你代码中没有这样的语句?是在别的地方释放了吗?
      

  3.   

    var
      MyJpeg: TJpegImage;
      bmp: TBitmap;
    begin
      bmp:= Tbitmap.Create;
      MyJpeg:= TJpegImage.Create;
      bmp.LoadFromFile('c:\aa.BMP');  // 为了测试aa.bmp 图像一定要大
      MyJpeg.Assign(Bmp);  // 我想这句是造成问题的关键吧,如果小图片没问题,对于大图片就...
      MyJpeg.SaveToFile('c:\test.JPG');
      bmp.free;
      myjpeg.free;
    end;
    现在跟代码没有关系了吧!有没有办法不用MyJpeg.Assign(Bmp);这句,直接转换出,这样对于大图片就不会有问题了
      

  4.   

    to kiss2(KISS)
    我用过你
    ------
    var
      MyJpeg: TJpegImage;
      bmp: TBitmap;
    begin
      bmp:= Tbitmap.Create;
      MyJpeg:= TJpegImage.Create;
      bmp.LoadFromFile('c:\aa.BMP');  // 为了测试aa.bmp 图像一定要大
      MyJpeg.Assign(Bmp);  // 我想这句是造成问题的关键吧,如果小图片没问题,对于大图片就...
      MyJpeg.SaveToFile('c:\test.JPG');
      bmp.free;
      myjpeg.free;
    end;
    ------------
    这段代码,没有问题啊,我的aa.bmp大小是36868k,可以转换啊,没有问题,转换成的
    test.jpg大小为1672k!
      

  5.   

    这就奇怪了,我转换一副3036x3036的BMP图片(26MB),显示错误说:JPEG error #36
      

  6.   

    to kiss2(KISS):你的
    *********************************************************************************
    var
      MyJpeg: TJpegImage;
      bmp: TBitmap;
    begin
      bmp:= Tbitmap.Create;
      MyJpeg:= TJpegImage.Create;
      bmp.LoadFromFile('c:\aa.BMP');  // 为了测试aa.bmp 图像一定要大
      MyJpeg.Assign(Bmp);  // 我想这句是造成问题的关键吧,如果小图片没问题,对于大图片就...
      MyJpeg.SaveToFile('c:\test.JPG');
      bmp.free;
      myjpeg.free;
    end;
    *********************************************************************************
    是对的,我试过了的
      

  7.   

    但是我转换一副3036x3036x24b的BMP图片(26MB),显示错误说:JPEG error #36
    这是为什么??有没有办法不用MyJpeg.Assign(Bmp);这句,直接转换出JPG?还有怎样才能增加一个转换进度?
      

  8.   

    to a12345(唯微): 搜索什么啊
      

  9.   

        会不会是系统出了什么问题呢?我也玩过抓取对方机器的屏幕然后用JPEG转换图片格式并在局域上发送回,并让用户自定义尺寸,压缩比,颜色等,本来做好了的。后想改一下,谁知道,这一改老是报错说JPEG出错,改回和原来一样也不行了。我还没有半桶水。
        还有我保存成JPEG文件后,那些文件用ACDSEE等其余软件打开可以,但如果在我自已的DELPHI程序中想再LOADFROMFILE却总是报错——说读不了,我至今仍没搞定,也没管了。
      

  10.   

    因为手头没有那么大的图片>1m,不能测试,
    但结果我想知道!帮你up
      

  11.   

    我想很可能是图片太大的问题,因为我试过把800x600图片放大6倍就无法显示了!
    但没有报错,只是image变灰了,什么都没有。
    不知道有没有遇到同样问题的兄弟呢!
      

  12.   

    看看你能不能用画图工具打开BMP图象呢?
    确定BMP图象没问题,肯定可以转换!
      

  13.   

    //BMP转换为JPG
    procedure TStuXXSLForm.LoadImageBitBtnClick(Sender: TObject);
    var
      MyJpeg:TJpegImage;
    begin
      inherited;
      if OpenPictureDialog1.Execute then
      begin
        FileName:=OpenPictureDialog1.FileName;
        Image1.Picture.LoadFromFile(FileName);
        if ExtractFileExt(FileName)='.Bmp' then
        begin
          MyJpeg:= TJpegImage.Create;
          MyJpeg.Assign(Image1.Picture.Bitmap);
          FileName:='Photo.Jpg';
          MyJpeg.SaveToFile(FileName);
          MyJpeg.Free;
        end;
      end;
    end; 
      

  14.   

    to genphone_ru(票票) :当然能打开,用ACDSee试过!能不能不用MyJpeg.Assign(Image1.Picture.Bitmap);转换出BMP格式??
    还有如何在转换时显示进度??
      

  15.   

    http://bluemoon.myrice.com/efg/graphics/VLBE.htm
    有一些关于极大位图的处理方法,希望对你有帮助。
      

  16.   

    我想,只有自己去实现JPEG压缩算法才能在转换时显示进度了……显示进度需要知道当前处理了多少数据,只有自己实现算法才行吧?或者有什么别人写好的算法但是提供OnProgress事件的?我也关注……
      

  17.   

    以下程序在Win2000+Delphi6测试通过exam: BMP2JPG('C:\aaaa.bmp', 'C:\bbbb.JPG', 75);//==============================================================================
    //转换BMP到JPG格式**************************************************************
    //==============================================================================
    procedure BMP2JPG(const Source, Target:string; const Scale: Byte);
    var Image: TImage;
        JPG: TJpegImage;
    begin
      Image := TImage.Create(Application);
      JPG := TJpegImage.Create;
      try
        Image.Picture.Bitmap.LoadFromFile(Source);
        JPG.Assign(Image.Picture.Bitmap);
        JPG.CompressionQuality := Scale;
        JPG.Compress;
        JPG.SaveToFile(Target);
      finally
        Image.free;
        JPG.Free;
      end;
    end;
      

  18.   

    我没有搞过转换,但我知道image控件不能应付太大的图像!我试过把图像(jpg的)放大都5000-6000像素,就会无法显示了!我认为这个是timage设计时定下的容量的问题!
        你的问题我想只要先把图像分割小再转换就可以解决了!
      

  19.   

    事实上如果你的BMP图太大,超过了内存承受范围时,转换就会出错的。因为DELPHI好象是把整个BMP读到内存里了。
    解决的办法:
    1,购买2G左右的内存(可能我疯掉了,买的越多,说明越疯)。
    2,重新写自己的转换算法(很多站点有)。或重写DELPHI的控件。
    3,对图进行分割,再合成。
    4,我还不知道。