3

以下のコードを使用して、ビットマップを jpeg に変換しています。ビットマップは 300 dpi (水平/垂直解像度) で渡されますが、CreateBitmapSourcefromHBitmap メソッドは常に後続の jpeg を 96 dpi で保存されるように変更します。

元の 300dpi を保持するようにソースを設定する方法はありますか? dpiX と dpiY の値は読み取り専用です。

前もって感謝します。

public static MemoryStream GetJpgMemoryStream(Bitmap bitMap, int jpgQuality)
{
    IntPtr hBitmap = bitMap.GetHbitmap();

    try
    {      

        BitmapSource source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

        var jpegBitmapEncoder = new JpegBitmapEncoder();

        jpegBitmapEncoder.QualityLevel = jpgQuality;
        jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(source));

        var jpegStream = new MemoryStream();

        jpegBitmapEncoder.Save(jpegStream);

        jpegStream.Flush();


        return jpegStream;

    }
}
4

2 に答える 2

0

MSDN フォーラムには、あなたの問題に似た議論があります。推奨される答えは、Interop を使用せず、代わりに JPEGのWriteableBitmapとして使用することです。BitmapSource

于 2012-11-15T18:57:31.820 に答える