我正在使用以下代码将位图转换为 jpeg。位图以 300 dpi(水平/垂直分辨率)传递,但 CreateBitmapSourcefromHBitmap 方法始终将后续 jpeg 更改为以 96dpi 保存。
请问有什么办法可以设置源保留原来的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;
}
}
最佳答案
MSDN Forum有一个类似于你的问题的讨论。推荐的答案是不使用 Interop,而是使用 WriteableBitmap
作为 JPEG 的 BitmapSource
。
关于c# - 从位图转换为 JPEG 并保留原始位图分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391927/