Silverlight ImageTools.IO.Jpeg.JpegDecoder Плохое качество - PullRequest
1 голос
/ 05 сентября 2011

Я использую ImageTools для Silverlight для загрузки изображения JPG, но качество декодированного изображения ПЛОХО (без сглаживания, см. Второе изображение в красном квадрате).

Вот мой код:

OpenFileDialog dlg = new OpenFileDialog();

if (dlg.ShowDialog() == true)
{
    var stream = dlg.File.OpenRead();
    var newImg = new ExtendedImage(); // ExtendedImage is a ImageTools Api class
    var d= new ImageTools.IO.Jpeg.JpegDecoder();
    d.Decode(newImg, stream);
    image1.Source = newImg.ToBitmap(); //image1 is a System.Windows.Controls.Image
}

Исходное изображение

this is the source image

Плохой результат

this is the bad result

Наблюдения

Если я установлю image1.source непосредственно на URL исходного изображения, изображение будет правильно отображено!

Это ошибка в API ImageTools?

Проблема опубликована в Codeplex , но она не имеет ответов.

Если я переписываю свой код, я получаю тот же результат.

1033 * XAML * <UserControl x:Class="JPGDecoder.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <Image Height="120" HorizontalAlignment="Left" Margin="46,75,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="160" Source="/JPGDecoder;component/Images/org.jpg" /> <Image Height="120" HorizontalAlignment="Left" Margin="212,75,0,0" Name="image2" Stretch="Fill" VerticalAlignment="Top" Width="160" /> <Button Content="Decode JPG from File Stream" Height="23" HorizontalAlignment="Left" Margin="44,25,0,0" Name="button1" VerticalAlignment="Top" Width="192" Click="button1_Click" /> </Grid> C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ImageTools;

namespace JPGDecoder
{
public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var dlg = new OpenFileDialog();

        if (dlg.ShowDialog()==true)
        {
            var stream = dlg.File.OpenRead();
            var newImg = new ExtendedImage();
            var d = new ImageTools.IO.Jpeg.JpegDecoder();
            d.Decode(newImg, stream);
            image2.Source = newImg.ToBitmap();
        }
    }
}
}

Результат

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

ImageTools не поддерживает сглаживание, поэтому я получил FJCore от Subversion и запустил пример приложения.

  1. Первый же тест, плохое качество.
  2. Глядя на исходный код, я нашел этот блок кода:

    // Resize
    DecodedJpeg jpegOut = new DecodedJpeg(
        new ImageResizer(jpegIn.Image).Resize(320, ResamplingFilters.NearestNeighbor),
        jpegIn.MetaHeaders); // Retain EXIF details
    

    и изменил его следующим образом:

    //Resize
    DecodedJpeg jpegOut = new DecodedJpeg(
        new ImageResizer(jpegIn.Image).Resize(320, ResamplingFilters.LowpassAntiAlias),
        jpegIn.MetaHeaders); // Retain EXIF details
    

Это решение: ResamplingFilters.LowpassAntiAlias ​​

Спасибо всем !!

0 голосов
/ 06 сентября 2011

Ммм ... Думаю, было бы неплохо, если бы вы разместили вопрос на форуме CodeTlex , этот автор довольно быстро отвечал.

Вы проверили образцы с его сайта?

Обычно у меня не было проблем с этой библиотекой.

Приветствие Braulio

...