c# - 从位图转换为 JPEG 并保留原始位图分辨率

标签 c# .net bitmap jpeg dpi

我正在使用以下代码将位图转换为 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/

相关文章:

Android - 在图像上绘制

c# - 在C#中更有效地播放声音

c# - 无需开源的可扩展性

c# - 为什么此绑定(bind)不能通过 XAML 工作,而是通过代码工作?

c# - Entity Framework 从另一个 E.F 选择查询获得的 ID 列表中选择

c# - ElasticSearch Hitboosting

android - 位图太大,无法上传到纹理中

c# - 如何设置 Bing map 样式?

.net - C# 内部 VS VBNET Friend

java - 从相邻的 GL10 绘图图像中获取线条,解决方案?