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
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
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.
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;
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;