【发布时间】:2014-05-04 11:37:48
【问题描述】:
我需要加载 .png 图像,因为我需要它的透明度。例如在 bmp 中转换它不是一个选项,因为我失去了它的透明度。 我该怎么做?
【问题讨论】:
标签: c++ png timage c++builder-xe5
我需要加载 .png 图像,因为我需要它的透明度。例如在 bmp 中转换它不是一个选项,因为我失去了它的透明度。 我该怎么做?
【问题讨论】:
标签: c++ png timage c++builder-xe5
只需为stdimage.hpp 添加一个包含。
在设计时,这将使 .png 文件在 Image.Picture 对话框中可用。在运行时,您可以使用该文件创建和加载 TPngImage,并将其分配给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 代码和解释以及 C++ Builder,因为 TImage 和 TPngImage 都是 Delphi 类,因此它是相关的,并且因为 C++ Builder 用户应该非常熟悉将 Delphi 代码翻译为整个 VCL是基于它构建的。另外,由于TImage 是一个 Delphi VCL 组件,Delphi 用户可能会发现问题并找到有用的信息。)
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;
更多信息在XE5 documentation
【讨论】:
TPngImage *Image;
在 C++ Builder 中,代码可能如下所示:
#include <pngimage.hpp>
....
std::auto_ptr<TPngImage> img(new TPngImage());
img->LoadFromFile(...);
Image1->Picture->Assign(img);
【讨论】:
auto_ptr 包含memory 标头。这是不言而喻的!