2011-06-29 1 views
1

私はVS2010プロジェクトでいくつかの32ビットPNGファイルを使用していますが、LoadResource/LockResourceなどを使用してISTreamからGDI +ビットマップにロードしています。私のWin7開発マシンでは、すべて正常に動作しています。VSNG10のPNG画像GDI +を使ってXPで奇妙なことをしているリソースファイル

しかし、私はWin7でうまく動作するSetColorMatrix/ImageAttributesを使っていくつかの色とアルファのマスキングを行っていますが、XPでそれを実行し、ImageAttributesパラメータでBitmap :: DrawImageを呼び出すとPNGは描画されませんすべて。問題を示唆するためにエラーが発生しているようではありませんが、目に見えません。

リソースからではなくファイルから直接ロードされたイメージで同じコードを実行すると、XPとWin7では正常に動作しますが、PNGファイルをバンドルする必要はありません。ボギーのその人生をもっとエキサイティングにするために、私のXPマシンは遅すぎてVS2010を実行しようと思っていません!

私はこれに長い時間を費やし、私はインスピレーションから外れているので、誰かがこれを引き起こしている可能性があるアイデア、または問題を追跡するための提案を持っていますか?

ありがとうございます。

アップデート:

負荷より多くのテストの後、私は完全にこれの一番下に持っていないが、ビットマップ(のIStream *)コンストラクタを使用して何とかPNG画像のアルファチャンネルをマングリングされていることを示唆する強力な証拠があります透明性を持って私は何が起こっているのか正確には分かっていませんが、私は解決策を見つけました。リソースファイルからPNGを読み込み、FIBITMAPの生の画像データからBitmapオブジェクトを作成するためにFreeImageを使用します。これは完全に動作しているので、証拠はそのビットマップコンストラクタの問題を指しています。

アップデート2:便宜上、私はすべての私のイメージをロードするためにそれを使用することにしましたが、それは、トラブルの標準的なBMPファイルを読み込むを持っていたので、

私はリソースからPNGファイルをロードするためにFreeImageを使用するために作成したクラスは素晴らしい作品。調べると、BMPファイルをBITMAPリソースとしてインクルードすると、BMPファイルの最初の14バイトがリソースバンドルに格納される前に削除されてしまい、ロードするのが難しいようです。とにかく、簡単に回避できます - 私は "BITMAP"リソースのリソースタイプを "BMP"に変更したので、基本的には未知のタイプとして扱い、ファイル全体を保存します。だから今はすべて意図どおりに動いている。ちょうど私が経験を掲示し、同じことをやろうとするとうまくいけば誰か他の人を救うと思った。

答えて

0

私は最後に自分自身で答えを見つけました(ちょうどこれを更新して、回答としてマークすることができます)。

状況によっては、PNGのGDI +や透過性に関連するバグがあるようです。私はFreeImageを使ってPNGを読み込んでいましたが、これがBMPの別の問題を引き起こしました。それはVSのBITMAPリソースが14バイトを取り除かれたように見えます。すでにVSにビットマップであると伝えていれば、これは重複した情報であると思われます。LoadImage()や標準のWinAPI関数を使ってリソースを読み込むと、これは正常ですが、FreeImageのように別のライブラリを使用している場合は、リソースタイプをIMAGE(またはBITMAP以外のもの)に変更する必要があります)を実行してからLoadResourceを使用してロードしてください。

0

トレースステートメントの束を入れてXPで実行すると、どこかにエラーコードが返されるはずです。 MFCラッパークラスを使用せず、基本のWin32 APIを呼び出すようにしてください。私はCImageや友人に悪い経験をしてきました。私がしているのは、pngを32ビットのビットマップ(bmp)に変換し、それらを:: LoadImage()でロードし、:: AlphaBlt()を使ってそれらを描画します。

また、透明度のないpngを試してみてください。問題はすべて、ピクセル単位の透過性を持つ画像にありました。それがうまくいくなら、あなたは少なくとも見始める方向を知っています。

+0

私は解決策を見つけることができました(上記を参照)。私はアルファチャンネルをねじ込んで使用していたビットマップ(IStream *)コンストラクタに何か問題があると思います。残念ながら、透明性を備えたPNGを使用する以外に選択肢はありません。これが最初に使用し始めた理由の1つです。 – Redeye

関連する問題