Welcome, Guest
Username: Password: Remember me
CodeTyphon MS Windows (Win7, Win8.x, Win10 and Win11) OS Development, discussions and problems
  • Page:
  • 1

TOPIC:

Image picture from bufferdataset 2 weeks 6 days ago #19448

  • Fernando Sandoval
  • Fernando Sandoval's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 58
  • Thank you received: 0
HI i don't know what doing wrong i have app testing with some data and image files store in blob fields on buffer dataset look good save file 
procedure TFormmsgDlgs.BtnSaveClick(Sender: TObject);
Var ms: TMemoryStream;
buf: TBytes;
begin
  FormMain.BDMessages.FieldByName('ImageFile').AsString:= FileNameEdit1.FileName;
  ms := TMemoryStream.Create;
  Image1.Picture.SaveToStream(ms);
  SetLength(buf, ms.Size);
  ms.Read(PByte(buf)^, ms.Size);
  FormMain.BDMessages.FieldByName('Imagen').AsBytes := buf;
  FormMain.BDMessages.Post;
  FormMain.BDMessages.SaveToFile(GetCurrentDir+'\messagedlg.db');
  ms.Free;
  Self.close;
end;

but when i try to load image pincture from  bufferdataset send me a error..

procedure TFormmsgDlgs.FormShow(Sender: TObject);
var
  stream: TStream;
begin
  if lnew=true then begin
    FormMain.BDMessages.Open;
    FormMain.BDMessages.Append;
    FileNameEdit1.FileName :='';
    FormMain.BDMessages.FieldByName('ID').AsINteger:=FormMain.BDMessages.RecNo+1 ;
  end else begin
   FormMain.BDMessages.edit;
    DBEID.ReadOnly:=true;
    FileNameEdit1.FileName :=FormMain.BDMessages.FieldByName('ImageFile').AsString;
    Image1.Picture.Clear;
    if( not FormMain.BDMessages.FieldByName('imagen').IsNull) then begin
      stream := FormMain.BDMessages.CreateBlobStream(FormMain.BDMessages.FieldByName('imagen'), bmRead);  //load image from bufds
      if stream.Size > 0 then
       begin
        stream.Position := 0;
         Image1.Picture.LoadFromStream(stream);
  //       Image1.Picture.LoadFromStreamWithFileExt(stream, 'jpg');
      end;
      stream.Free;
   end;
  end;
end;
 

Please Log in or Create an account to join the conversation.

Image picture from bufferdataset 2 weeks 5 days ago #19449

  • LuZZZZi
  • LuZZZZi's Avatar
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 111
  • Thank you received: 1
Hello,

Your error message shows me an ICNS file format. In Wiki en.wikipedia.org/wiki/Apple_Icon_Image_format it is an Apple owned format. I think you have to write the raw data into a buffer and then to extract the image data and put them into the picture class.

Cheers

Please Log in or Create an account to join the conversation.

Image picture from bufferdataset 2 weeks 5 days ago #19450

  • Matis A.
  • Matis A.'s Avatar
  • Away
  • Moderator
  • Moderator
  • Posts: 1367
  • Thank you received: 215
Try


  Image1.Picture.Jpeg.SaveToStream();
  Image1.Picture.Jpeg.LoadFromStream();

or


  Image1.Picture.png.SaveToStream();
  Image1.Picture.png.LoadFromStream();
PilotLogic Core Programmer

Please Log in or Create an account to join the conversation.

Last edit: by Matis A..

Image picture from bufferdataset 2 weeks 4 days ago #19452

  • Fernando Sandoval
  • Fernando Sandoval's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 58
  • Thank you received: 0
ok tried differents way to solve this problem but i got error witch i dont understand  on load from image form stream

here is the process so safe on bufferdataset any error

procedure TFormmsgDlgs.BtnSaveClick(Sender: TObject);

Var ms: TMemoryStream;
buf: TBytes;
begin
  FormMain.BDMessages.FieldByName('ImageFile').AsString:= FileNameEdit1.FileName;
  ms := TMemoryStream.Create;
  Image1.Picture.Jpeg.SaveToStream(ms);
  SetLength(buf, ms.Size);
  ms.Read(PByte(buf)^, ms.Size);
  FormMain.BDMessages.FieldByName('Imagen').AsBytes := buf;
  FormMain.BDMessages.Post;
  FormMain.BDMessages.SaveToFile(GetCurrentDir+'\messagedlg.db');
  ms.Free;
  lnew:=false;
  Self.close;
end;
   
but i load image from stream send error on 

procedure TForm1.bdsAfterScroll(DataSet: TDataSet);
var
  stream: TStream;
begin
  Image1.Picture.Clear;
  stream := FormMain.BDMessages.CreateBlobStream(FormMain.BDMessages.FieldByName('imagen'), bmRead);  //load image from bufds
  if stream.Size > 0 then  //  here send me error
  begin
    stream.Position := 0;
    Image1.Picture.LoadFromStream(stream);
  end;
  stream.Free;
end;  

Please Log in or Create an account to join the conversation.

Image picture from bufferdataset 2 weeks 2 days ago #19456

  • firliri
  • firliri's Avatar
  • Offline
  • New Member
  • New Member
  • Posts: 12
  • Thank you received: 1
Hello,
You can't retrieve the picture from the database because you saved none while you forgot to set ms.Position to 0 before reading buffer from the image stream.
You can test
if ms.Read(PByte(buf)^, ms.Size) <> ms.Size
to ensure the right amount of bytes read.

Please Log in or Create an account to join the conversation.

  • Page:
  • 1