[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1976
  • Last Modified:

How to convert string to Bitmap

Hi, i want to convert a string (that contains Bitmap-data) to TBitmap, but it doesn't work. here is my code:

var FS: TFileStream;
    bmpdat: string;
    BMP: TBitmap;
begin
 FS := TFileStream.Create('pic.BMP', fmOpenRead);
 SetLength(bmpdat, FS.Size);
 FS.ReadBuffer(Pointer(bmpdat)^, FS.Size);
 FS.Free;

 BMP := TBitmap.Create;
 BMP.Assign(bmpdat); // something wrong here
 Image1.Canvas.Draw(0, 0, BMP);
 BMP.Free;
end;

(yes, i know that i can use TBitmap to read the file, but i want to use TFileStream...!)

help me! :)
0
din345
Asked:
din345
1 Solution
 
Russell LibbySoftware Engineer, Advisory Commented:
If you just want to use a filestream, then the following works

var FS: TFileStream;
    bmpdat: string;
    BMP: TBitmap;
begin

  FS:=TFileStream.Create('pic.BMP', fmOpenRead);
  try
     BMP:=TBitmap.Create;
     try
        BMP.LoadFromStream(FS);
        Image1.Canvas.Draw(0, 0, BMP);
     finally
        BMP.Free;
     end;
  finally
     FS.Free;
  end;

end;

---

Regards,
Russell

0
 
BdLmCommented:
If i understand your question correct, you may use something like this

Bitmap Create or Open
//Copy the string with the Canvas Function into the Bitmap
 Canvas.textout(xposition,yposition, String);
Save, Close the Bitmap

Misunderstanding?
0
 
Bart_ThomasCommented:
You want to read a image from stream. That can be done much easier. A TBitmap can't process a string that contains bitmapdata. I don't even know if a string is able to contain this type of data. In essence it is a array of byte. If you really want to use a string, things might get a little more complicated.

This is much easier:

var
  B: TBitmap;
  F: TFileStream;
begin
  B := TBitmap.Create;  
  F := TFileStream.Create ('pic.bmp', fmOpenRead);
  try
    F.Position := 0;
    B.LoadFromStream (F);

    // Use bitmap
    Image1.Canvas.Draw(0, 0, B);  
    finally
      F.Free;
      B.Free;
    end;
 end;
0
 
Slick812Commented:
hello  din345 , , you can use a String to store the Bitmap file as data, but the TBitmap, needs a Stream to load an image from, so you might can use a TStringStream to do that, , like this - -


procedure TForm1.sbut_BmpStrStreamClick(Sender: TObject);
var FS: TFileStream;
    StrStm: TStringStream;
    bmpdat: string;
    BMP1: TBitmap;
begin
 FS := TFileStream.Create('E:\Bmp1.bmp', fmOpenRead);
 SetLength(bmpdat, FS.Size);
 FS.ReadBuffer(Pointer(bmpdat)^, FS.Size);
 FreeAndNil(FS);

 BMP1 := TBitmap.Create;
 StrStm := TStringStream.Create(bmpdat) ; // get string as stream
 BMP1.LoadFromStream(StrStm);
 FreeAndNil(StrStm);
 Image1.Canvas.Draw(0, 0, BMP1);
 FreeAndNil(BMP1);
end;
0
 
ZhaawZSoftware DeveloperCommented:
why don't you just load that picture, using TBitmap().LoadFromFile(filename) ?

var
  bmp : TBitmap;
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('pic.BMP');
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now