Vampyre Imaging Library Forum

Imaging Category => Help & Questions => Topic started by: bunak on 7 November 2009, 09:06:11

Title: images - array of bytes TO png jpeg
Post by: bunak on 7 November 2009, 09:06:11
I have images that fill by bytes.
This images- 1024х1280х1- opened in Photoshop as RAW - format, with parameter depth - 8 Bits, Count - 1, Width, Height

In code image save in
imageBuf: array[0..1279, 0..1023] of byte;

Is it possible convert this array of bytes to jpeg or png
Title: Re: images - array of bytes TO png jpeg
Post by: bunak on 7 November 2009, 09:27:18
Do like this

  mem_st := TMemoryStream.Create;
  Img := TSingleImage.Create;
  try
    mem_st.WriteBuffer(imageBuf, 1280 * 1024);
    mem_st.Position := 0;
    Img.LoadFromStream(mem_st);
    Img.SaveToFile(DirSave_path + '\' + node_img_name.NodeValue + '.jpg');
  finally
    mem_st.Free;
    Img.Free;
  end;


In result - is nothing
Title: Re: images - array of bytes TO png jpeg
Post by: Galfar on 7 November 2009, 19:23:07
There's no need to load the image from somewhere if it's already in memory. You can just create empty image with desired size and format, and then copy memory from your imageBuf to image's Bits property.
Title: Re: images - array of bytes TO png jpeg
Post by: bunak on 8 November 2009, 19:26:40
Thank you

Help me please
I do like this
var
  singl_Img: TSingleImage;
  Img : TImageData;
begin
  if not NewImage(img_W, img_H, ifIndex8, Img) then Exit;
  CopyMemory(Img.Bits, @imageBuf[0], Img.Size);
  singl_Img.CreateFromData(Img);

  try
    singl_Img.SaveToFile(DirSave_path + '\' + node_img_name.NodeValue + '.jpg');
  finally
    singl_Img.Free;
  end;

but get "Access violation" error on singl_Img.CreateFromData(Img);

the error erise in this procedure
{ TBaseImage class implementation }
constructor TBaseImage.Create;
begin
  SetPointer;
end;
Title: Re: images - array of bytes TO png jpeg
Post by: bunak on 8 November 2009, 20:14:47
And in result i do like this, and I happy
  singl_Img := TSingleImage.Create;
  singl_Img.CreateFromParams(img_W, img_H, ifGray8);
  CopyMemory(singl_Img.Bits, @imageBuf[0], singl_Img.Size);

  try
    singl_Img.SaveToFile(DirSave_path + '\' + img_name + '.' + cmbx_ImageExt.Text);
  finally
    singl_Img.Free;
  end;