Bitmap clip = new Bitmap((int)(8.5 * 72), (int)(11 * 72));
MemoryStream stream = new MemoryStream();
clip.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
私はそれを自分のマシンで実行しましたbytes.Length
が8587
、仲間の開発者のマシンでは でした2009
。おそらく.NET
、PNG圧縮の品質(この場合は比率)に影響を与える方法はありません。この特定の画像は空白の画像であり、コンテンツを含む画像で動作する他のテストがあり、圧縮がロスレスであることを確認しています(それが問題であるいくつかの議論に遭遇しました).
ただし、圧縮がロスレスであっても、圧縮アルゴリズムの実行時間 + CPU 使用率と圧縮率 / 品質の間にはトレードオフがあります。System.Drawing.Imaging
この上記のケースは、違いがある可能性があることを明確に示しているため、品質をどのように決定するのだろうか。クライアントのマシンで 100% の品質 (1.457.337 サイズのファイルが生成される) が選択されないようにするにはどうすればよいですか?
関連資料:
- .net での PNG 圧縮
- C# - PNG の品質または色深度を変更する方法
- C#でカスタム品質または色深度でpng画像を保存する
- http://bytes.com/topic/c-sharp/answers/700494-how-specify-compression-level-when- Saving-loseless-pngs
追加情報:
- 別の開発者のマシンをチェックアウトしたところ、他の同僚の結果と一致していたので、私のマシンは外れ値です。
- 各マシンには Win 7 Prof 64 ビットがインストールされており、特定のテストは NUnit であり、.NET 4 を使用しています。
- この点で、インストールしたソフトウェアのいずれかが .NET の動作をオーバーライドすることはできますか? たとえば、IrfanView をインストールしましたが、システム全体の「フィルター」または使用されている dll を置き換えることができますか? (ところで、モジュールのデバッグ ビューをチェックインしましたが、異常な dll がロードされていません)
- 一部の Windows OS デスクトップの品質設定などの影響を受ける可能性はありますか?