Solved

How to convert string to Bitmap

Posted on 2004-09-27
5
1,668 Views
Last Modified: 2013-12-03
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
Comment
Question by:din345
5 Comments
 
LVL 26

Accepted Solution

by:
Russell Libby earned 250 total points
ID: 12162301
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
 
LVL 8

Expert Comment

by:BdLm
ID: 12162342
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
 
LVL 1

Expert Comment

by:Bart_Thomas
ID: 12162451
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
 
LVL 34

Expert Comment

by:Slick812
ID: 12163466
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
 
LVL 11

Expert Comment

by:ZhaawZ
ID: 12173672
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

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question