我在wpf应用程序中有tiff图像。首先我使用memorystream将图像转换为字节,然后我将字节转换为bitmapimage。我给图像提供了bitmapimage。我还拍摄了另一张图像并直接给它的源图像路径而没有转换。我观察到的是转换后图像的质量变低。为什么会这样?
我的代码如下。 我用了 File.ReadAllBytes(“filepath”)将图像转换为字节。
我使用下面的方法从byte []获取BitmapSource。然后我将bitmapsource分配给图像
public static System.Windows.Media.Imaging.BitmapSource ConvertBytesToBitmapSource(byte[] imageBytes)
{
System.Drawing.Bitmap source = new System.Drawing.Bitmap(ConvertBytesToImage(imageBytes));
IntPtr imagePtr = source.GetHbitmap();
System.Windows.Media.Imaging.BitmapSource bitmapSour = null;
try
{
bitmapSour = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(imagePtr,
IntPtr.Zero, System.Windows.Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
catch (Exception ex)
{
logger.Error("Error in converting bytes to BitmapSource", ex);
throw ex;
}
finally
{
DeleteObject(imagePtr);
}
return bitmapSour;
}
答案 0 :(得分:0)
您应该使用Graphics对象绘制新图像,而不是仅创建图像。这是示例代码
System.Drawing.Image sourceImage = System.Drawing.Image.FromStream(sourceStrm, true, true); System.Drawing.Bitmap destBitmap = new System.Drawing.Bitmap(destWidth, destHeight); System.Drawing.Graphics grap = System.Drawing.Graphics.FromImage((System.Drawing.Image)destBitmap); grap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; grap.DrawImage(sourceImage, 0, 0, destWidth, destHeight);
如果不是您使用的方式,请您发布一些您使用的示例代码。
答案 1 :(得分:0)
谢谢Waqas Raja的回复。我解决了问题 将项目从3.5版本转换为4.0版本时,图像质量下降。在3.5版本中,默认情况下图像质量较高。但在4.0版本中,我们需要明确指定图像质量以获得高质量BitScalingMode依赖属性为
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.HighQuality);
您可以参考链接