C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: png画像の表示について


(過去ログ 56 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■31266 / inTopicNo.1)  png画像の表示について
  
□投稿者/ よっしー (1回)-(2009/01/19(Mon) 16:56:43)

分類:[C/C++] 

宜しくお願いします。

当方の環境はWindowsXp / VisualC++ 2003です。

フォームにpngファイルの画像を表示したいと思っています。
フォームの作成はCreateWindowで行っています。
ビットマップファイルの表示方法は色々と見つかるのですが、pngの表示方法がなかなか見つかりません。
自分なりに調べてみた結果、GDI+かPNGLIBを使う方法が見つかったのですが、なぜかGDI+をインクルードするとGDI+関係のファイル(gdiplus.h等)がエラーを沢山出して落ちてしまいます。
原因を調査する為にエラーを出したファイルを覗いてみたのですが、自分にはまだ全然知識不足で手が出せませんでした。
とりあえずの現状打破の為、他の手段があればと思いSOSを出させていただきました。
何かよい方法がありましたら教えていただけませんでしょうか?

(ちなみに、当方の環境はネットからのファイルのダウンロードができない為、PNGLIBは断念しました。)

引用返信 編集キー/
■31283 / inTopicNo.2)  Re[1]: png画像の表示について
□投稿者/ Azulean (267回)-(2009/01/20(Tue) 00:32:30)
> 自分なりに調べてみた結果、GDI+かPNGLIBを使う方法が見つかったのですが、なぜかGDI+をインクルードするとGDI+関係のファイル(gdiplus.h等)がエラーを沢山出して落ちてしまいます。
MFCのプロジェクトとかですかね?

http://support.microsoft.com/kb/317799/
引用返信 編集キー/
■31396 / inTopicNo.3)  Re[2]: png画像の表示について
□投稿者/ よっしー (2回)-(2009/01/21(Wed) 13:04:54)
No31283 (Azulean さん) に返信

ご回答有難うございます。
返事が遅くなり申し訳ありませんでした。

初心者の為、よくわからなかったのでMFCとはなんなのか調べていました。
今私が作成しているプログラムはどうやらMFCではなさそうです。
このサイトの別の質問でもあったのですが、純粋なwin32プロジェクトのようなので、GDIは使えないようですね。

GDIやPNGLIBを使わずにPNGファイルを表示する方法はあるのでしょうか?

宜しくお願いします。
引用返信 編集キー/
■31400 / inTopicNo.4)  Re[3]: png画像の表示について
□投稿者/ 774RR (295回)-(2009/01/21(Wed) 13:32:46)
> GDIやPNGLIBを使わずにPNGファイルを表示する方法はあるのでしょうか?
政治的理由があるのであれば話は別なんだけど
そういうのって「車輪の再実装」とか「不必要な努力」っていうんぢゃないかな。

#include <gdiplus.h> でエラーが出る原因を追究するのにかかる時間と
自分で png フォーマットを理解して、読み込みルーチンを実装して、表示ルーチンを実装して・・・
にかかる時間とでは、多分前者のほうが圧倒的に短いんだろうと思うの心。
引用返信 編集キー/
■31402 / inTopicNo.5)  Re[4]: png画像の表示について
□投稿者/ よっしー (3回)-(2009/01/21(Wed) 13:42:48)
No31400 (774RR さん) に返信

ご回答有難うございます。

という事はPNGファイルを表示するのは容易ではないという事でしょうか?

政治的理由というほどの事ではないのですが、PNGLIBは訳あって使えない状況です。
GDIについては私事なので皆様には関係の無い話でしょうが、今からMFCで作り直すにはあまりに時間がないもので。

憶測ですが、GDIのエラーについては元々MFCで作っていないのにいきなりGDIを組み込もうとした為、どこかで矛盾が生じたのだと思っています。

なのでGDIを実装する以外に早い道が無いのであればMFCで作り直すしかないのですが、他に道があれば教えていただきたいです。

引用返信 編集キー/
■31403 / inTopicNo.6)  Re[5]: png画像の表示について
□投稿者/ επιστημη (1560回)-(2009/01/21(Wed) 13:58:32)
επιστημη さんの Web サイト
GDI+はMFCを必要条件とはしていないはずですよん。

たとえばコレ↓、ふつーのC++window-appで使ってますです。
http://msdn.microsoft.com/ja-jp/library/ms533895(en-us,VS.85).aspx

引用返信 編集キー/
■31404 / inTopicNo.7)  Re[5]: png画像の表示について
□投稿者/ 774RR (296回)-(2009/01/21(Wed) 13:59:08)
そんなのわからない・答えられないよ。
容易って用語をどういう意図で使っているか次第。本人のスキルもわかんないし。
jpg が自由自在に表示できるってんなら png だって大差ないよ。

http://oshiete1.goo.ne.jp/qa4052901.html
でも外部ライブラリは一切使わないんだろ?
ならばlibpngを全部自分で作る手間がかかる。それは単に時間の無駄なだけ。
引用返信 編集キー/
■31405 / inTopicNo.8)  Re[3]: png画像の表示について
□投稿者/ aetos (76回)-(2009/01/21(Wed) 14:31:00)
No31396 (よっしー さん) に返信
> GDIやPNGLIBを使わずにPNGファイルを表示する方法はあるのでしょうか?

GDI と GDI+ は別物です。区別しましょう。

GDI+ 以外だと、OleLoadPictureFile でもいけるかもしれませんね。
引用返信 編集キー/
■31414 / inTopicNo.9)  Re[4]: png画像の表示について
□投稿者/ 渋木宏明(ひどり) (1028回)-(2009/01/21(Wed) 18:07:00)
渋木宏明(ひどり) さんの Web サイト
> GDI+ 以外だと、OleLoadPictureFile でもいけるかもしれませんね。

イケるはずだけど、OS やインストールされている IE のバージョンなんかによって機能レベル(≒扱える画像フォーマット等)が変化するので、第三者に配布するような場合、動作環境を規定するのが難しいです。

# XP, Vista で、最新の IE7 がインストールされていれば、まず大丈夫なはず?


引用返信 編集キー/
■31419 / inTopicNo.10)  Re[5]: png画像の表示について
□投稿者/ Azulean (271回)-(2009/01/21(Wed) 23:18:14)
No31402 (よっしー さん) に返信
> GDIについては私事なので皆様には関係の無い話でしょうが、今からMFCで作り直すにはあまりに時間がないもので。
混乱させてしまって申し訳ありません。

既に多くの方のフォローがついていますが、GDI+とMFCは関係がありません。
先の発言で、私がMFCを出したのは、DEBUG_NEWによってコンパイルエラーが出ているのではないかという推測に基づいたものです。


gdiplus.hでエラーが出るというのであれば、どんなエラーか、いくつか示してもらえればヒントをもらえる可能性があります。
引用返信 編集キー/
■31531 / inTopicNo.11)  Re[5]: png画像の表示について
□投稿者/ よっしー (4回)-(2009/01/23(Fri) 13:12:39)
皆さん、たくさんのお返事有難うございます。

またレスが遅れました。

申し訳ありません。

現状ですが、実はあまり進展していません。ずっと模索中でした。
ただ、何とかLibPNGを使う選択肢も得ることができたので、GDI+と2方法で考えています。

現状としては

{GDI+}
進展ないです。
エラーとしては「gdiplusheader.h」で「')'がありません」のエラーが複数存在し、そのエラーに付随するエラーらしきものが大量にでています。


{LibPNG}
zlibとlibpngについては、下記サイトを参考に進めています。
http://hp.vector.co.jp/authors/VA016379/cpplib/libpng.htm

しかし、libpngのビルドまでは正常にいったのですが、いざアプリケーションに組み込んで実際にloadpngを使おうとするとloadpng.hで「','が'&'の前に必要です」というエラーで失敗してしまいます。

人様のソースなので勝手に転載しない方がいいと思いますが、どうにもならないのでエラーになる一行だけ。。。
HBITMAP loadpng(const string &sfilename);

HPの作者に尋ねようにもトップページが見つからず聞くことができません。
どなたかエラー内容に心当たりのある方いらっしゃいますでしょうか?
引用返信 編集キー/
■31534 / inTopicNo.12)  Re[6]: png画像の表示について
□投稿者/ 出水 (110回)-(2009/01/23(Fri) 13:40:35)
エラーは一つだけじゃないでしょう
その前にあるエラーの意味はわかってますか?

error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2143: 構文エラー : ',' が '&' の前にありません。

再現どおりなら、using namespace std; がありません
引用返信 編集キー/
■31535 / inTopicNo.13)  Re[7]: png画像の表示について
□投稿者/ よっしー (5回)-(2009/01/23(Fri) 13:42:34)
No31534 (出水 さん) に返信

お返事ありがとうございます。

私の環境でビルドした所、
> error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
はでませんでした。

> error C2143: 構文エラー : ',' が '&' の前にありません。
このひとつだけなのですが、出水さんとの環境の違いでしょうか?
引用返信 編集キー/
■31555 / inTopicNo.14)  Re[8]: png画像の表示について
□投稿者/ とっちゃん (365回)-(2009/01/23(Fri) 15:29:30)
とっちゃん さんの Web サイト
No31535 (よっしー さん) に返信

エラーは、loadpng.cpp で出るのでしょうか?
それとも、loadpng.h をインクルードしている自分のソースで出るのでしょうか?

前者であれば、コンパイルの設定でそのソースだけプリコンパイルヘッダーは利用しないにしてビルドしてみてください。
後者であれば、再現しなくなるまでインクルードしている行より前のソースを削除してみてください。

そのうえで、再現しなくなったら
再現した当時のソースとの違い(差分情報)を、loadpng.cpp のソースなどと比べてみて足りないものなどを調査してみてください。


ところで...loadpng.cpp の最初のほうで、透過情報を捨てちゃうようですが問題はありませんか?

引用返信 編集キー/
■31558 / inTopicNo.15)  Re[9]: png画像の表示について
□投稿者/ よっしー (6回)-(2009/01/23(Fri) 16:35:46)
No31555 (とっちゃん さん) に返信

お返事有難うございます。

loadpng.hは出水さんに教えていただいた通りusing namespace std;で通りました。
しかし今度はloadpng.cppでmemcpy、memsetでイテレータを渡そうとしているところでエラーが…

> > > ところで...loadpng.cpp の最初のほうで、透過情報を捨てちゃうようですが問題はありませんか?
…問題あります。
すいません、ソースの内容はよく理解できてなかったのでてっきり透過処理も通るものかと…

libPNGの使い方で詳しく&画像処理プログラム初心者でもわかりやすく教えてくれるサイトをご存知ないでしょうか?
引用返信 編集キー/
■31648 / inTopicNo.16)  Re[10]: png画像の表示について
□投稿者/ とっちゃん (366回)-(2009/01/26(Mon) 16:44:24)
とっちゃん さんの Web サイト
No31558 (よっしー さん) に返信

> loadpng.hは出水さんに教えていただいた通りusing namespace std;で通りました。
> しかし今度はloadpng.cppでmemcpy、memsetでイテレータを渡そうとしているところでエラーが…
>
ちゃんとソース読んでみるといいですよ。そうすればなんでエラーになるのかわかると思います。
というか...

>>>>ところで...loadpng.cpp の最初のほうで、透過情報を捨てちゃうようですが問題はありませんか?
> …問題あります。
> すいません、ソースの内容はよく理解できてなかったのでてっきり透過処理も通るものかと…
>
どこがよく理解できなかったのでしょうか?
それがわからんとコメントのしようもなく。。。なのですが。

libPNGはすごく良くできたライブラリなのですが、ソースポータビリティを上げるために
かなりマクロを多用しています。

そのため、読みづらい(読みにくい)部分が少なからず存在しているのですが
少なくとも、png.h 程度は人に聞かずとも読み解ける程度の知識が必要とされます。
ま、実際は簡単な利用法のドキュメントと、結構細かいところまで潜りこんで操作してるサンプルを見れば
かなり細かいレベルで使えるようになると思うんですけどね。。。


> libPNGの使い方で詳しく&画像処理プログラム初心者でもわかりやすく教えてくれるサイトをご存知ないでしょうか?
検索とかしてみました?

おいらは知らんですが、ここでも結構細かいレベルで教えてくれる人はいますよ。
画像処理にしても、libPNG などの使い方にしても。。。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -