私は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"に変更したので、基本的には未知のタイプとして扱い、ファイル全体を保存します。だから今はすべて意図どおりに動いている。ちょうど私が経験を掲示し、同じことをやろうとするとうまくいけば誰か他の人を救うと思った。
私は解決策を見つけることができました(上記を参照)。私はアルファチャンネルをねじ込んで使用していたビットマップ(IStream *)コンストラクタに何か問題があると思います。残念ながら、透明性を備えたPNGを使用する以外に選択肢はありません。これが最初に使用し始めた理由の1つです。 – Redeye