Top / Programming / C++Builder / PNGファイルを扱う

PNGファイルを扱う

簡単な使い方

  1. PNG Delphiからダウンロードして展開します。
  2. プロジェクトと同じフォルダに、pasファイルとobjフォルダをコピーします。
  3. プロジェクトにpngimage.pasを追加します。
  4. 「ユニットのコンパイル」をします。
    pngimage.hppが作成されます。
  5. コードに #include "pngimage.hpp" を追加します

サンプル

//---------------------------------------------------------------------------
/**
 * BitmapファイルをPNGファイルに変換する。
 */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //Bitmapファイルを選択する
  if (!OpenDialog1->Execute()) return;
  //Bitmapファイルを開く
  Graphics::TBitmap* bitmap = new Graphics::TBitmap();
  bitmap->LoadFromFile(OpenDialog1->FileName);
  //PNGファイルに変換して保存する
  TPNGObject* png = new TPNGObject();
  png->Assign(bitmap);
  png->SaveToFile(ChangeFileExt(OpenDialog1->FileName, ".png"));

  delete png;
  delete bitmap;
}

TPNGObjectは、TBitmapやTJPEGImageと同じ感覚で使えます。

//---------------------------------------------------------------------------
/**
 * PNGファイルを表示する
 */
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  //PNGファイルを選択する
  if (!OpenDialog1->Execute()) return;
  //PNGファイルを表示する
  Image1->Picture->LoadFromFile(OpenDialog1->FileName);
}

なぜか、TPicture::LoadFromFile()でPNGファイルが読み込めるようになりました。

2009年3月10日 追記

C++Builder 2009では標準でPNGファイルを扱うことができるようになりました。

#include <pngimage.hpp>
#pragma link "vclimg.lib"
TPngImage* png = new TPngImage();
//PNGファイルの読み込み
png->LoadFromFile("C:\sample.png");
//他の形式の画像をコピー
TBitmap* bmp = new TBitmap();
bmp->LoadFromFile("C:\sample.bmp");
png->Assign(bmp);
//ファイルに保存
png->SaveToFile("C:\sample.png");

2009年5月28日 追記

C++Builder2009 Update3で「#pragma link "vclimg.lib"」は必要なくなりました。

#include <pngimage.hpp>
TPngImage* png = new TPngImage();
//PNGファイルの読み込み
png->LoadFromFile("C:\sample.png");
//他の形式の画像をコピー
TBitmap* bmp = new TBitmap();
bmp->LoadFromFile("C:\sample.bmp");
png->Assign(bmp);
//ファイルに保存
png->SaveToFile("C:\sample.png");

関連