如何从字节转换后提高图像质量?

时间:2011-01-21 07:41:06

标签: wpf image

我在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;

        }

2 个答案:

答案 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);

您可以参考链接

http://msdn.microsoft.com/en-us/library/bb613591.aspx