请教一个关于图片存储的问题啊
TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片
会报错:bitmap image is not valid
是否要求存入流里的必须是bitmap格式???
我现在的需求是,支持bitmap,jpg,jpeg格式图片存储,若为bitmap格式则转换为jpg格式再存入数据库。求代码

解决方案 »

  1.   

    uses jpeg就可以存jpg格式了
      

  2.   

    uses jpegprocedure TForm1.suiButton1Click(Sender: TObject);
    var
      mStream:TMemoryStream;
      JpgFile:TjpegImage;
      jbmp:TBitmap;
    begin
         //-----------向数据库加班图片
         adoquery1.Append;
         mstream:=TMemoryStream.Create;
         JpgFile:=TjpegImage.Create ;
          jbmp:=TBitmap.Create;  if OpenDialog.Execute then
      begin
      try
        mstream.LoadFromFile(OpenDialog.FileName);
        mStream.Position :=0;    if uppercase(extractfileext(OpenDialog.FileName))='.BMP' then  begin
            jbmp.LoadFromStream(MStream);
             adoQuery1.FieldByName('xp').Assign(jbmp);
        end else begin      if (uppercase(extractfileext(OpenDialog.FileName))='.JPG') OR
             (uppercase(extractfileext(OpenDialog.FileName))='.JPEG') then
          jpgfile.LoadFromStream(MStream);
          adoQuery1.FieldByName('xp').Assign(JpgFile);    end;   adoquery1.Post;
       finally
          jpgfile.Free;
          jbmp.Free;
          mstream.Free;
       end;
       end;
    end;
      

  3.   

    引用过了
    请仔细看一下我的需求:
    支持bitmap,jpg,jpeg格式图片存储,若为bitmap格式则转换为jpg格式再存入数据库。求代码
      

  4.   

    3楼的这种做法只是原格式存储,我的要求是:若为bitmap格式则转换为jpg格式再存入数据库!!!
      

  5.   

    如果要转:jpgfile.LoadFromStream(MStream);
    jbmp.Assign(jpgfile)
    adoQuery1.FieldByName('xp').Assign(jbmp);
      

  6.   

    应该JPG的格式使用的空间会比BMP小.
      

  7.   

    你这是转为bitmap,如果转为jpg可以同样用法并且存储吗??
      

  8.   

     if OpenDialog_ks.Execute then 
      begin 
        ext:=ExtractFileExt(OpenDialog_ks.FileName );  //取出文件的扩展名 
        if (uppercase(ext) = '.BMP') or (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') then 
        begin 
          Image1.Picture.LoadFromFile(OpenDialog_ks.FileName ); 
          if Image1.picture.Graphic  <> nil then 
          begin 
            filename:= ExtractFileName(OpenDialog_ks.FileName);  //取出文件的名 
            word_stream := TMemoryStream.Create; 
            try 
              if not (ADOQueryKS.State  in [dsEdit,dsInsert]) then 
                ADOQueryKS.Edit ; 
              if uppercase(ext) = '.BMP' then 
              begin 
                MyBMP := TBitmap.Create; 
                with MyBMP do 
                try 
                  Assign(Image1.Picture.Bitmap); 
                  MyJPEG := TJPEGImage.Create; 
                  with MyJPEG do 
                  begin 
                    Assign(MyBMP); 
                    CompressionQuality:=100;     //压缩比例 
                    Compress; 
                    SaveToStream(word_stream); 
                    p:=pos('.',filename);       //更改文件名 
                    savename:=Copy(filename,0,p)+'jpg'; 
                    Savetofile(savename); 
                    Image1.Picture.Graphic.Assign(MyJPEG); 
                    Free; 
                  end; 
                  ADOQueryKS.FieldByName('filename_image').Value:=savename; 
                  word_stream.Position:=0; 
                  word_stream.LoadFromFile(savename); 
                finally 
                  Free; 
                end; 
              end 
              else 
              begin 
                Image1.Picture.Graphic.SaveToStream(word_stream); 
                ADOQueryKS.FieldByName('filename_image').Value:=filename;   //保存图片名 
              end; 
              TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片???报错:bitmap image is not valid 
            finally 
              word_stream.Free; 
            end; 
          end; 
        end 
        else 
        begin 
          showmessage('您选择的文件格式无效,请重新选择正确的图片格式!'); 
          abort; 
        end; 
      end;
      

  9.   

    统一保存为jpg格式,帮我看一下代码哪里有问题
      

  10.   

    简单的问题,楼主复杂化了,传个示例给你吧,给个邮件地址,示例入面可以分别对BMP,JPG等格式的文件作保存,统一保存为BMP格式.
      

  11.   

    是吗?我感觉是不数据库支持统一保存为bmp格式,而不支持jpg格式,想知道jpg该如何存呢?
    好,先发给我看一下,多谢!
    [email protected]
      

  12.   

    TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片 
    会报错:bitmap image is not valid,我分析可能是因为'style_image'字段绑定了数据感知控件(且此控件只能显示Bmp格式的图片)bitmap格式则转换为jpg很简单:
    uses
      jpeg;
    function BmpToJpg(bmpSource: TBitmap): TJPEGImage;
    begin
      Result := TJPEGImage.Create;
      Result.Assign(bmpSource);
    end;
      

  13.   

    TBlobField(ADOQueryKS.FieldByName('style_image')).LoadFromStream(word_stream); //保存图片 
    会报错:bitmap image is not valid,我分析可能是因为'style_image'字段绑定了数据感知控件(且此控件只能显示Bmp格式的图片)bitmap格式则转换为jpg很简单:
    uses
      jpeg;
    function BmpToJpg(bmpSource: TBitmap): TJPEGImage;
    begin
      Result := TJPEGImage.Create;
      Result.Assign(bmpSource);
    end;
      

  14.   

    也发我一份吧。[email protected]