背景の少し:いずれかのファイルの場所(以前にスキャンされた画像)からの入力を取ることができる保存JPGファイルはC#でサイズが増加
私はWPFを使用してバーコードイメージスキャナデスクトップアプリケーションを書いて、またはスキャナ(NTWAINを使用して)から直接取得されているかどうかを確認します。どちらの場合も、ストリームを作成または取得します。私は、ストリームから新しいビットマップを作成し、
bmp.Save(file.FileFullPath, ImageFormat.Jpeg);
に建てられたエンコーダ
using (var bmp = Image.FromStream(rawStream))
{
EncoderParameter ratio = new EncoderParameter(Encoder.Quality, 100L);
EncoderParameter depth = new EncoderParameter(Encoder.ColorDepth, 8L);
EncoderParameters codecParams = new EncoderParameters(2);
codecParams.Param[0] = ratio;
codecParams.Param[1] = depth;
ImageCodecInfo jpegCodecInfo = ImageCodecInfo.GetImageEncoders().FirstOrDefault(x => x.FormatID == ImageFormat.Jpeg.Guid);
bmp.Save(file.FileFullPath, jpegCodecInfo, codecParams); // Save to JPG
}
かを使用してJPEGファイルとして保存するとき
は今、私ははるかに大きいで終わる傾向にありますファイルサイズ。もちろん、これは必ずしも当てはまるわけではありませんが、小さな白黒のTIFFファイルをメモリに読み込んでjpgとしてエンコードするときは間違いありません。
画像処理に関する私の知識は基本的なものですが、jpgファイルは24ビットの色深度で保存され、最初は1ビットとして保存されていると思います。
私が何をしても、jpgファイルを元のファイルのビット深度に一致させることはできません。
私の周りだけの仕事は単に「filename.jpg」にファイルの名前を変更し、そう
using (Bitmap bmp = new Bitmap(rawStream))
{
Save(file.FileFullPath);
}
のように保存されたしかし、これは(、サイドの問題として無期限に動作しません解決策のように感じています一つは、単に.JPG *に任意の* .BMPまたは* TIFFファイルの名前を変更することができ、それはまだ動作します?)
私の初期の研究に基づいて
bmp.Save()
がencodを尊重していないように思えますjpeg画像のビット深度のパラメータを指定します。理解できないことに、私のクライアントは、ファイルが16KBから200KBまで "無理由"で成長しても幸せにならないでしょう。
この問題については既知の回避策がありますか、ストリームと画像を扱う際に明らかなものがありませんか?
あなたはjpgを再エンコードしています。この新しいjpgで使用している品質設定は、オリジナルを作成するために使用されたものとは異なります。 –
色深度を8Lに設定するコードの行を別のものに変更しようとしましたか? – itsme86
確かに私は持っています。変化なし。 – Richard