Как повысить качество изображения после преобразования из байтов? - PullRequest
0 голосов
/ 21 января 2011

У меня есть изображение tiff в приложении wpf. Сначала я преобразовал изображение в байты, используя поток памяти, а затем преобразовал байты в битовый образ.Я даю растровое изображение изображению. Я также беру другое изображение и указываю его исходный путь непосредственно к изображению без преобразований. То, что я наблюдал, это качество изображения после преобразований стало низким.Почему так происходит?

Мой код следующим образом.Я использовал File.ReadAllBytes ("filepath") для преобразования изображения в байты.

Я использовал метод ниже, чтобы получить 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 голосов
/ 31 января 2011

Спасибо Вакасу Радже за ответ. Я решил проблему при конвертации проекта из версии 3.5 в 4.0 качество изображения снижается. В версии 3.5 по умолчанию качество изображения высокое. Но в версии 4.0 нам нужно явно указать качество изображения, чтобы получить высокое качество с помощью свойство зависимости BitScalingMode как

RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.HighQuality);

Вы можете сослаться по ссылке

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

0 голосов
/ 21 января 2011

Вы должны использовать графический объект, чтобы нарисовать новое изображение, а не просто создать изображение. вот пример кода

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);
<b>grap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;</b>
grap.DrawImage(sourceImage, 0, 0, destWidth, destHeight);

Если вы не так, как вы использовали, пожалуйста, опубликуйте пример кода, который вы использовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...