var
  MyJpeg: TJpegImage;
  bmp: Tbitmap;
  CompressionQuality:integer;
begin
  bmp:=tbitmap.Create;
  MyJpeg:= TJpegImage.Create;
  myjpeg.LoadFromFile('c:\windows\desktop\aa.jpg');     CompressionQuality:=MyJpeg.CompressionQuality;  //得到压缩率
  bmp.Assign(myjpeg);
  bmp.SaveToFile('c:\windows\desktop\test.bmp'); // 保存为bmpend;

解决方案 »

  1.   

    下面是一个由BMP文件压缩成JPEG文件的函数。其中压缩比Quality可由用户自定。
         Function TfrmMain.BMPTOJPG(BmpFile,JpgFile:pchar;Quality:word):integer;
         Var.
          Bmp:TbitMap;
          Jpeg:TjegImage;
         Begin
          Bmp:=nil;
          Jpge:=nil;
          If (Trim(BmpFile) = ’ ’) or (Trim(JpgFile) = ’ ’) then
         Begin
          Result=-2;
          Exit;
         End
          Try Begin
          Bmp:=Tbitmap.create; //建立bitmap类实例
          Bmp.LoadFromFile(BmpFile); //读入Bmp文件
          End;
          Except Begin
          If Bmp<>nil then Bmp.Free; //释放Bitmap类
          Result:=-1;
          Exit;
          End;
          End;
          Try Begin
          Jpeg:=TjpegImage.Create; //建立TjpegImage类实例
          Jpeg.Assign(Bmp); //复制图像数据
          Jpeg.compressionQuality:=Quality; //设置压缩率
          Jpeg.SaveToFile(JpgFile); //图像压缩后存盘
          End;
          Except Begin
          If Bmp<>nil then Bmp.Free;
          If Jpeg<>nil then Jpeg.Free; //释放TjpegImage类
          Result:=-3;
          Exit;
          End;
          End;
          Bmp.Free;
          Jpeg.Free;
          Result:=0;
         End;
      

  2.   

    两位朋友,我说的是从数据库中读出image字段的数据,如何知道该字段的图片数据写入数据库前是那种格式(即是否是按最优化设置从bmp转为jpg的)
      

  3.   

    试试看读Jpeg.compressionQuality属性的值,并判断!
      

  4.   

    你用什么方法去读这个image的内容?流?
    if dm.query_image.State <> dsBrowse  then exit;
                         if dm.query_image.FieldByName('content').IsNull then Exit;  //判断状态,content是我表里存放jpeg的field
                         dm.query_image.open;
                    
                         aStream1 := dm.query_image.CreateBlobStream(dm.query_image.FieldByName('content'), bmRead);
                         try
                            aStream1.Position := 0;
                            jpg:= tjpegimage.Create();
                            try
                               jpg.LoadFromStream(aStream1);
                               jpg.SaveToFile(ipath); //ipath:string 存放路径与文件名
                            finally
                               jpg.Free;
                            end;
                         finally
                            aStream1.Free;
                         end;
                    end;
      

  5.   

    对的,我是从数据库中读出数据保存到流中,再存入另一个数据库中,相当于两个数据库的数据同步,但源数据库中的照片数据大多保存以前使用最优化的压缩方式(bmp转为jpg),我的程序从我的数据库中读出照片数据显示不了,需先转为bmp,
    再转为jpg,才能显示