Search code examples
c++pngtimagec++builder-xe5

Load .png to TImage in Embarcadero C++Builder XE5


I need to load a .png image because i need it's transparency. It's not an option to convert it for example in bmp because i lose it's transparency. How can I do that?


Solution

  • Just add an include for stdimage.hpp.

    At designtime, this will make .png files available in the Image.Picture dialog. At runtime, you can create and load a TPngImage with the file, and assign it to the Image.Picture.

    #include <stdimage.hpp>
    
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
      TPngImage* img = new TPngImage();
      img->LoadFromFile("C:\\Images\\calculator.png");
      Image1->Picture->Assign(img);
      delete img;
    }
    

    (Delphi code and explanation included as well as C++ Builder, because the TImage and TPngImage are both Delphi classes and therefore it's relevant, and because C++ Builder users should be pretty familiar with translating Delphi code as the entire VCL is built on it. Also, as TImage is a Delphi VCL component, a Delphi user may find the question and find the information useful as well.)

    procedure TForm4.Button1Click(Sender: TObject);
    var
      Png: TPngImage;
    begin
      Png := TPngImage.Create;
      try
        Png.LoadFromFile('C:\Images\calculator.png');
        Image1.Picture.Assign(Png);
      finally
        Png.Free;
      end;
    end;
    

    More info in the XE5 documentation