2

問題があります。私は次のように私のviewModelでリソースからBitmapImageに適切にpng-imageをロードしようとしています:

Bitmap bmp = Resource1.ResourceManager.GetObject(String.Format("_{0}",i)) as Bitmap;
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Bmp);
BitmapImage bImg = new BitmapImage();

bImg.BeginInit();
bImg.StreamSource = new MemoryStream(ms.ToArray());
bImg.EndInit();

this.Image = bImg;

しかし、そうすると、画像の透明度が失われます。だから問題は、透明性を失うことなく、リソースからpng画像をロードするにはどうすればよいですか?ありがとう、パベル。

4

4 に答える 4

7

Ria の回答は、透明性の問題を解決するのに役立ちました。これが私のために働くコードです:

public BitmapImage ToBitmapImage(Bitmap bitmap)
{
  using (MemoryStream stream = new MemoryStream())
  {
    bitmap.Save(stream, ImageFormat.Png); // Was .Bmp, but this did not show a transparent background.

    stream.Position = 0;
    BitmapImage result = new BitmapImage();
    result.BeginInit();
    // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."
    // Force the bitmap to load right now so we can dispose the stream.
    result.CacheOption = BitmapCacheOption.OnLoad;
    result.StreamSource = stream;
    result.EndInit();
    result.Freeze();
    return result;
  }
}
于 2014-05-28T18:58:24.220 に答える
3

これは、BMPファイル形式が透過性をサポートしているのに対し、ファイル形式は透過性をサポートしていないためPNGです。透明性が必要な場合は、を使用する必要がありますPNG

ImageFormat.Png保存してみてください。

于 2012-07-18T08:47:43.620 に答える
0

この投稿を見て、ここと同じ透明性の問題に対する答えを見つけました。

しかし、与えられたサンプルコードを見て、このコードを共有してリソースから画像をロードしたかっただけです。

Image connection = Resources.connection;

これを使用して、画像を 16 ビットに再コード化する必要がないことがわかりました。ありがとう。

于 2012-12-18T09:09:27.320 に答える
0

BitmapImageこれは通常、サポートされていない64 ビット深度の PNG 画像が原因です。Photoshop はこれらを 16 ビットとして誤って表示するように思われるため、Windows エクスプローラーで確認する必要があります。

  • ファイルを右クリックします。
  • [プロパティ] をクリックします。
  • [詳細] タブに移動します。
  • 「ビット深度」を探してください。通常は画像セクションにあり、幅と高さがあります。

64 と表示されている場合は、画像を 16 ビット深度で再エンコードする必要があります。PNG のビット深度を適切に処理するため、Paint.NETを使用することをお勧めします。

于 2012-07-18T07:58:19.030 に答える