none
png読み込み後のBitmapのPixelFormatが不安定です。 RRS feed

  • 質問

  • 以下の通りpngファイルをBitmapに読み込んでいるのですが読み込んだ後のPixelFormatがシステムにより安定しません。

    Bitmap ^img = gcnew Bitmap("img.png");

    pngファイルは8bitなのでFormat8bppIndexedになることを期待しているのですが、特定のPCではFormat32bppArgbになってしまいます。

    読み込み時にPixelFormatを指定できるのでしょうか?

    2017年6月13日 3:18

回答

  • 私の環境 (Windows 10 x64 Ver 10.0.14393) で、ビットの深さ 8 の PNG を読み込んでみたところ、PixelFormat = Format8bppIndexed と正しく読み込まれました。特定の PC というのは具体的にどのような環境でしょうか?

    私の認識では、読み込み時に PixelFormat を指定することはできないので、読み込んだ後に変換するしかないように思います。

    Bitmap ^img  = gcnew Bitmap("img.png");
    Bitmap ^img2 = img->Clone(0, 0, img->GetWidth(), img->GetHeight(), PixelFormat8bppIndexed);
    • 編集済み kenjinoteMVP 2017年6月13日 4:08
    • 回答としてマーク Gakuden 2017年6月13日 4:08
    2017年6月13日 3:55

すべての返信

  • 私の環境 (Windows 10 x64 Ver 10.0.14393) で、ビットの深さ 8 の PNG を読み込んでみたところ、PixelFormat = Format8bppIndexed と正しく読み込まれました。特定の PC というのは具体的にどのような環境でしょうか?

    私の認識では、読み込み時に PixelFormat を指定することはできないので、読み込んだ後に変換するしかないように思います。

    Bitmap ^img  = gcnew Bitmap("img.png");
    Bitmap ^img2 = img->Clone(0, 0, img->GetWidth(), img->GetHeight(), PixelFormat8bppIndexed);
    • 編集済み kenjinoteMVP 2017年6月13日 4:08
    • 回答としてマーク Gakuden 2017年6月13日 4:08
    2017年6月13日 3:55
  • ご回答ありがとうございます。

    特別なPCではなくごく普通のWindows7PCです。

    開発PC(Windows7)では問題なくFormat8bppIndexedで読み込めるのですが、アプリを作って同僚のPCで実行したところ動作が不安定で、調査の結果Format32bppArgbになっていました。

    その後、いくつかのPCで実行したのですが、結果は2分しています。

    .NetやWindowsのバージョンが関係しているのか色々試してみましたがどうも無関係のようです。

    やはり変換するしか無いようですね。

    その様に対応してみます。ありがとうございました。

    2017年6月13日 4:08