JpegBitmapEncoder/RenderTargetBitmap — чрезмерная резкость с .net 2 по сравнению с 4.7.2

Я работаю над переносом устаревшей системы ASP.Net/C# в Azure. Первоначально просто меняем минимально возможную сумму, но часть этого переходит на обновленную платформу .Net (2/3/3.5 => 4.7+)

Частью этого является инструмент, который создает превью изображений в разных размерах, добавляет водяные знаки, затем повышает резкость, а затем сохраняет их.

Если бы клиент жаловался, что новые изображения слишком резкие.

После долгих экспериментов - обнаружил, что когда я исключаю дополнительный код повышения резкости (Aforge.Imaging), поэтому ничего не делается - результаты без резкости .Net 4.7.2 НАМНОГО острее, чем / Net 2

Я разработал копии программы, которые сделали минимум - как в .Net 4.7.2, так и в 2.0, один и тот же код - и изображения сильно отличаются.

Я предполагаю, что что-то изменилось в рамках?

Можно ли немного уменьшить резкость?

В принципе, некоторая резкость хороша, но это зашло слишком далеко.

Код использует потенциально необычный путь для создания превью, поскольку в других областях (не в тестовой программе) он выполняет манипуляции с метаданными/цветовым пространством, плюс он довольно старый. В основном используется System.Windows.Media.Imaging

К вашему сведению, качество изображения составляет 75 точек на дюйм, а размер изображения – 72. Размер изображения – 320.

Основные (не все) тестовые программы:

          imageStream = new FileStream(fileFullPath, FileMode.Open, FileAccess.Read, FileShare.Read);
    
    BitmapDecoder decoder = BitmapDecoder.Create(imageStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
    myBitmapSource = decoder.Frames[0];

....

      
    BitmapFrame myBitmapSourceFrame = (BitmapFrame)myBitmapSource;
    destColorContext = new ColorContext(new Uri(iccTargetProfile));
    ColorContext sourceColorContext;
    try
    {
             sourceColorContext = myBitmapSourceFrame.ColorContexts[0];
    }
    catch (Exception Err)
    {//If no inbuilt profile then default to AdobeRGB
               sourceColorContext = new ColorContext(new Uri(iccDefaultProfile)); ;
    }
    
    ColorConvertedBitmap ccb = new ColorConvertedBitmap(myBitmapSource, sourceColorContext, destColorContext, PixelFormats.Pbgra32);
    
    myBitmapSource = ccb;

....

      
    double nPercent = ScalePercentage(myBitmapSource.PixelHeight, myBitmapSource.PixelWidth, imgSize, imgSize);
    int newHeight = Convert.ToInt16((double)myBitmapSource.PixelHeight * nPercent);
    int newWidth = Convert.ToInt16((double)myBitmapSource.PixelWidth * nPercent);
    
    //resize by re-drawing onto new Bitmap
    RenderTargetBitmap rtBitmap = new RenderTargetBitmap(
       newWidth /* PixelWidth */,
       newHeight /* PixelHeight */,
       imageDPI /* DpiX */,
       imageDPI /* DpiY */,
       PixelFormats.Default);
    
    DrawingVisual drawVisual = new DrawingVisual();
    
    using (DrawingContext dc = drawVisual.RenderOpen())
    {
            dc.DrawRectangle(new ImageBrush(myBitmapSource), null /* no pen */,
                                new Rect(0, 0, rtBitmap.Width, rtBitmap.Height));
    
    
    rtBitmap.Render(drawVisual);
    
    //WATERMARK STUFF HERE
    
    //Previous Sharpening stuff HERE
    
    List<ColorContext> colorContexts = new List<ColorContext>();
    colorContexts.Add(destColorContext);
    
    //encoder
    JpegBitmapEncoder output = new JpegBitmapEncoder();
    output.QualityLevel = imageQuality;
    //output.Frames.Add(BitmapFrame.Create(outFrame));
    output.Frames.Add(BitmapFrame.Create(rtBitmap, null, null, new System.Collections.ObjectModel.ReadOnlyCollection<ColorContext>(colorContexts)));
    
    
    string endImage = folderDest + fileNameOnly;
    
    using (FileStream saveFileStream = new FileStream(endImage, FileMode.Create, FileAccess.Write))
                        {
                            output.Save(saveFileStream);
                        }

Итак, две картинки - без резкости с использованием одного и того же кода для их создания....

.Нет 2.0

.Нет 4.7.2

Надоедливый ....

0 ответов

Другие вопросы по тегам