Как изменить размер растрового изображения в С# без смешивания или фильтрации?

У меня есть изображение в оттенках серого, которое я хотел бы увеличить, чтобы лучше видеть отдельные пиксели. Я попытался установить для режима сглаживания значение «Нет» и некоторые другие режимы интерполяции (как предлагается в других вопросах здесь), но изображения по-прежнему кажутся мне такими, как будто они все еще выполняют какое-то смешивание перед отображением на экране.

в основном, если у меня есть изображение, которое

(White, White,
 White, Black)

Я хочу, чтобы, когда я увеличу его до размера 6x6, он выглядел как

 (White, White, White, White, White, White
  White, White, White, White, White, White
  White, White, White, White, White, White
  White, White, White, Black, Black, Black
  White, White, White, Black, Black, Black
  White, White, White, Black, Black, Black)

Без затухания между черными и белыми областями должен выглядеть квадрат. Изображение должно выглядеть более «пикселизированным», чем «размытым».


person hrh    schedule 12.07.2012    source источник
comment
Каковы ваши исходное и целевое разрешения?   -  person ken2k    schedule 12.07.2012


Ответы (3)


Попробуйте установить режим интерполяции:

g.InterpolationMode = InterpolationMode.NearestNeighbor;
person Raman Zhylich    schedule 12.07.2012
comment
Это кажется близким, но не совсем правильным. Начиная с квадрата 2x2 пикселя, я получаю четыре разных области, но не все они имеют одинаковый размер. - person hrh; 12.07.2012
comment
Выяснилось, что мне нужно было также добавить: g3.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; - person hrh; 13.07.2012
comment
@hrh ты такой классный! - person DaSqy Stc; 28.05.2016

Я тоже хотел сделать что-то подобное. Когда я нашел этот вопрос, ни один из ответов не был совсем тем, что я искал, но вместе они были. Это то, что привело меня туда, где я хотел быть, и из того, что я могу сказать из вашего вопроса, чего вы хотите.

private Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height)
{
    Bitmap result = new Bitmap(width, height);
    using (Graphics g = Graphics.FromImage(result))
    {
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
        g.DrawImage(sourceBMP, 0, 0, width, height);
    }
    return result;
}
person Soltris    schedule 21.09.2012
comment
Небольшое объяснение вашего кода должно помочь автору быстро разобраться. - person AYK; 21.09.2012
comment
Спасибо вам большое за это. Потратил пару часов, пытаясь понять это, пытаясь преобразовать bmp в graphics и обратно в bmp, чтобы использовать InterpolationMode, но ваш метод заставил его работать без сжатия! Спасибо!! - person theGreenCabbage; 09.01.2014

Может быть, это может помочь!

http://www.codeproject.com/Articles/191424/Resizing-an-Image-On-The-Fly-using-NET

В противном случае вы можете реализовать этот метод и посмотреть, работает ли он для вас?

private static Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height )
{
            Bitmap result = new Bitmap(width, height);
            using (Graphics g = Graphics.FromImage(result))
                g.DrawImage(sourceBMP, 0, 0, width, height);
            return result;
 }
person CodeMad    schedule 12.07.2012