Граница изображения отсутствует после уменьшения масштаба - PullRequest
3 голосов
/ 31 января 2012

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

Вот пример (оригинал, 60x60, 30x30):

original result60 result30

мой код:

foreach(int x in new[]{60, 30})
{
    var result = new Bitmap(x, x);
    var g = Graphics.FromImage(result);
    g.DrawImage(new Bitmap(MediaDir + "original.png"), 0, 0, x, x);
    result.Save(MediaDir + "result" + x + ".png", ImageFormat.Png);
}

Я что-то упустил?

изменить, вот результат с использованием HighQualityBicubic:

enter image description here enter image description here enter image description here enter image description here

Ответы [ 3 ]

3 голосов
/ 31 января 2012

Установите режим интерполяции на InterpolationMode.HighQualityBicubic.

Эффекты этого параметра можно увидеть в Microsoft Tutorial . В нижнем левом примере есть проблемы, аналогичные вашим.

2 голосов
/ 31 января 2012

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

0 голосов
/ 17 февраля 2012

Я использовал этот обходной путь для этой "ошибки".Когда я изменил размер стандартной фотографии в магазине, у некоторых из них была серая левая / верхняя граница, а у некоторых - нет.Так что просто используйте этот код

g.DrawImage(src, -1, -1, width+1, height+1);

и он отлично работает.Я также нахожу некоторые подсказки о режиме пикселей или пытаюсь использовать какой-то специальный атрибут с методом drawimage, но он не работает для меня.

...