2011-01-21 55 views
0

我在wpf应用程序中有tiff图像。首先我使用memorystream将图像转换为字节,然后将字节转换为bitmapimage。我给图片提供了bitmapimage。我还拍摄了另一张图片,并且直接给出其图片路径,而无需转换。我观察到的是转换后图片的质量变低。为什么会发生?如何提高从字节转换后的图像质量?

我的代码如下。我使用了 File.ReadAllBytes(“filepath”)将图像转换为字节。

我用下面的方法来从字节[]得到的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

这是一个好题。如果没有压缩算法,除了伽马校正,我不会看到它们会如何失去质量。 – 2011-01-21 07:46:36

回答

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

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

如果它不是你使用的方式,你可以请张贴你使用的一些示例代码。

+0

谢谢你给出的答复,但它不工作 – Vamsy 2011-01-21 11:21:26