pngの変換について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

pngの変換について

#1

投稿記事 by » 16年前

http://www.play21.jp/board/formz.cgi?ac ... &rln=34370
のスレ主です。

皆さん折角回答していただいたのに、返事が出来ないですみませんでした。

この質問について探していたのですが現行スレから落ちてしまってたので
もう一度上げさせていただきます。

APIとC++だけでpngを読み込めるようにしようと考えております。
今使っている↓のものではBMPしか利用できません。

//==============================================================================================
// ビットマップ読み込み(ファイルから)
//==============================================================================================
HDC LoadFileBMP(HDC hdc, LPCTSTR f_name_of_bmp){
    HBITMAP hbmp;
    HDC hdc_work; // 作業用ハンドル

    hbmp = (HBITMAP)LoadImage(0, f_name_of_bmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    hdc_work = CreateCompatibleDC(hdc);
    SelectObject(hdc_work, hbmp);
    DeleteObject(hbmp);
//	if(FAILED(hdc_work)){
//		MessageBox(hWnd,TEXT("読み込みに失敗しました。"),NULL,MB_OK);
//	}
    return hdc_work;
}
これを拡張するか新規に関数を作ってpngも対応させたいです。
前スレのURLをみたのですがコンパイルできないものもありました・・・。

できればAPIとC++だけで読み込みたいのですが、どうにかならないでしょうか?
できるのでしたらサンプルコードを書いていただけますと助かります・・・。
人任せで申しわけないです。

VS2005AC

Justy

Re:pngの変換について

#2

投稿記事 by Justy » 16年前


>前スレのURLをみたのですがコンパイルできないものもありました・・

 逆に言えば、コンパイルできたものもあったわけですよね。
 
 ちなみに試してみましたところ、libpngはそのままビルドできました。
 GDI+の方は、たしかに載っていたコードそのままではコンパイルは通りませんでしたが、
ヘッダを調べたら2,3分ほどですんなり出来ました。
 クラスなどの APIが Gdiplusの名前空間内にあったことと、GetHbitmap()が GetHBITMAP()だった
ことくらいでした。

 再チャレンジしてみては?



>できるのでしたらサンプルコードを書いていただけますと助かります・

 フルスクラッチでの pngのデコードはいろいろ面倒です。

PNG 仕様書: チャンク仕様書
ttp://www.sutv.zaq.ne.jp/linuz/tks/PngSpec1.2/PNG-Chunks.html

PNG ファイルフォーマット
ttp://www.river.sannet.ne.jp/yuui/fileformat/png.html

PNG ファイルフォーマット
ttp://www14.ocn.ne.jp/~setsuki/ext/png.htm
ttp://www14.ocn.ne.jp/~setsuki/ext/chunk/IHDR.htm

 見ての通り色深度とカラータイプだけでも組み合わせればそれなりの種類になりますし、
そもそもイメージデータは圧縮されているのでそれもデコードしなければなりません。
 そのほか、インターレース形式、ガンマ値補正、ホワイトバランスなどもあり
それらも対応しなければなりません。

 そんなものをサンプルで、というのはちょっと……。

Justy

Re:pngの変換について

#3

投稿記事 by Justy » 16年前

Vector:imgctl.dll (Windows95/98/Me / プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se222453.html

 フリーウェアですが、これも使えそうですね(試してはいませんが)。
 PNGtoDIB()で DIBにしてから、imgctl_util.cにある DIBtoOBJ()を使えば
HBITMAPに変換できそうです。

閉鎖

“C言語何でも質問掲示板” へ戻る