C# 从位图转换为JPEG并保留原始位图分辨率
我正在使用下面的代码将位图转换为jpeg。位图以300 dpi(水平/垂直分辨率)通过,但CreateBitmapSourcefromHBitmap方法始终更改要以96 dpi保存的后续jpeg 有没有办法将震源设置为保留原始300dpi?dpiX和dpiY值为只读 提前谢谢C# 从位图转换为JPEG并保留原始位图分辨率,c#,.net,bitmap,jpeg,dpi,C#,.net,Bitmap,Jpeg,Dpi,我正在使用下面的代码将位图转换为jpeg。位图以300 dpi(水平/垂直分辨率)通过,但CreateBitmapSourcefromHBitmap方法始终更改要以96 dpi保存的后续jpeg 有没有办法将震源设置为保留原始300dpi?dpiX和dpiY值为只读 提前谢谢 public static MemoryStream GetJpgMemoryStream(Bitmap bitMap, int jpgQuality) { IntPtr hBitmap = bitMap.GetH
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;
}
}
他们的讨论与你的问题类似。建议不要使用互操作,而是使用
WriteableBitmap
作为JPEG的BitmapSource
。您必须更改用于生成BitmapSource
的方法。您可以使用中所述的方法生成位图源文件
。这是更新后的代码
BitmapData data = bitMap.LockBits(
new System.Drawing.Rectangle(0,0,bitMap.Width,bitMap.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
bitMap.PixelFormat);
BitmapSource source = BitmapSource.Create(bitMap.Width, bitMap.Height,
bitMap.HorizontalResolution, bitMap.VerticalResolution,
System.Windows.Media.PixelFormats.Bgr24, null,
data.Scan0, data.Stride*bitMap.Height, data.Stride);
bitMap.UnlockBits(data);
var jpegBitmapEncoder = new JpegBitmapEncoder();
jpegBitmapEncoder.QualityLevel = jpgQuality;
jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(source));
var jpegStream = new MemoryStream();
jpegBitmapEncoder.Save(jpegStream);