2

このトピックの背景を説明します。memorystream を使用して memorystream.ToArray(); を返すことにより、画像ファイルを byte[] に変換しようとしています。しかし、inputBitmap -> byte[] -> outputBitmap 変換後に画質が低下することに気付きました。outputBitmap は、inputBitmap より品質が低くなります。画像をバイト[]に変換する私のコードは次のとおりです

MemoryStream mstream = new MemoryStream();
myImage.Save(mstream,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] buffer = mstream.ToArray();

byte[] から画像に戻すには、

MemoryStream mstream = new MemoryStream(buffer);
Image newImage = Image.FromStream(mstream);

誰かがこれがなぜなのかを説明し、できればこの問題を解決するために私を導くことができますか? inputBitmap を pictureBox.Image として使用する前は、品質が優れていることに注意してください。しかし、バイト[]からoutputBitmapに変換した後、outputBitmapをpictureBox.Imageとして設定すると、ぼやけて品質が低下します。

4

1 に答える 1

5

いくつかのことが際立っています。

  1. PNG のような可逆形式ではなく、JPG に保存しています。
  2. 画像の保存に使用される圧縮の品質を設定していません。

これは、すでに圧縮されている画像を圧縮している可能性が高いため、その過程でさらに多くの情報が失われることを意味します。

できればファイルを PNG として保存するように変更しますが、保存する前に JPG の品質を 100% に設定してください。これにより、ファイルの圧縮が最小限に抑えられるため、データの損失が最小限に抑えられます。

それでも品質に違いが見られる場合は、スクリーン ショットと保存されたファイルの解像度 (ピクセル数および/または色深度) の違いが原因であると考えられます。ターゲット ビットマップのサイズと色深度がソース ビットマップと同じになるように設定してください。

于 2013-01-29T11:30:31.813 に答える