void __fastcall TForm1::Button4Click(TObject *Sender)
{
std::auto_ptr<TPngImage>png(new TPngImage);
std::auto_ptr<TJPEGImage>jpg(new TJPEGImage);
std::auto_ptr<TGIFImage>gif(new TGIFImage);
std::auto_ptr<TBitmap>bmp(new TBitmap);
png->LoadFromFile(L"D:\\a.png"); // 加载 a.png 图片
// bmp->Assign(png.get()); // png 转为 bmp, 这句注释掉了,因为:
// 如果 png 有 Alpha 通道,是半透明的,那么直接 Assign 到 bmp 里面是黑背景的
// 如果需要指定一个背景颜色,就需要先把和 png 同样大小的 bmp 填充为指定的背景色
// 然后把 png 输出到背景色的 bmp 上,就达到了设定背景颜色的效果
// Copyright Victor Chen,
TColor clBkgnd = TColor(RGB(255,255,255)); // 背景色为白色 R=255, G=255, B=255
TRect rcBmp(0, 0, png->Width, png->Height); // bmp 的大小和 png 的大小相同
bmp->PixelFormat = pf32bit; // bmp 设定为 32 位像素格式
bmp->SetSize(rcBmp.Width(), rcBmp.Height()); // bmp 的大小和 png 的大小相同
bmp->Canvas->Brush->Style = bsSolid; // 用 bsSolid 刷子填充 bmp
bmp->Canvas->Brush->Color = clBkgnd; // 指定刷子的颜色为背景颜色
bmp->Canvas->FillRect(rcBmp); // bmp 填充为背景色
bmp->Canvas->Draw(0,0,png.get()); // 把 png 输出到背景颜色的 bmp 上
jpg->Assign(bmp.get()); // 再由 bmp 转为 jpg
gif->Assign(bmp.get()); // 再由 bmp 转为 gif
bmp->SaveToFile(L"d:\\test.bmp"); // 保存 bmp 到 test.bmp
jpg->SaveToFile(L"d:\\test.jpg"); // 保存 jpg 到 test.jpg
gif->SaveToFile(L"d:\\test.gif"); // 保存 gif 到 test.gif
}
bmp 转 jpg, gif, png
void __fastcall TForm1::Button15Click(TObject *Sender)
{
std::auto_ptr<TBitmap>bmp(new TBitmap);
std::auto_ptr<TJPEGImage>jpg(new TJPEGImage);
std::auto_ptr<TGIFImage>gif(new TGIFImage);
std::auto_ptr<TPngImage>png(new TPngImage);
bmp->LoadFromFile(L"D:\\a.bmp"); // 加载 a.bmp 图片
jpg->Assign(bmp.get()); // bmp 转为 jpg
gif->Assign(bmp.get()); // bmp 转为 gif
png->Assign(bmp.get()); // bmp 转为 png
jpg->SaveToFile(L"d:\\test.jpg"); // 保存 jpg 到 test.jpg
gif->SaveToFile(L"d:\\test.gif"); // 保存 gif 到 test.gif
png->SaveToFile(L"d:\\test.png"); // 保存 png 到 test.png
}