DrawImage() без сглаживания
От: kiple Россия  
Дата: 06.10.04 20:20
Оценка:
Не подскажите, как вывести на экран изображение смасштабированное в большую сторону без сглаживания? То есть каждая точка должна выглядеть как квадратная область с четкими границами. Например, так выглядить масштабированная картинка в Photoshope. Перепробовал различные комбинации Graphics.DrawImage() с Graphics.InterpolationMode, InterpolationMode.SmoothingMode и т.п. — ничего не получилось. Конечно, можно построить такое отмасштабированное изображение путем несложных расчетов — но это требует дополнительных вычислительных ресурсов, чего хотелось бы избежать. thx.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: DrawImage() без сглаживания
От: Unforgiver Россия  
Дата: 07.10.04 05:59
Оценка:
Здравствуйте, kiple, Вы писали:

K>Не подскажите, как вывести на экран изображение смасштабированное в большую сторону без сглаживания? То есть каждая точка должна выглядеть как квадратная область с четкими границами. Например, так выглядить масштабированная картинка в Photoshope. Перепробовал различные комбинации Graphics.DrawImage() с Graphics.InterpolationMode, InterpolationMode.SmoothingMode и т.п. — ничего не получилось. Конечно, можно построить такое отмасштабированное изображение путем несложных расчетов — но это требует дополнительных вычислительных ресурсов, чего хотелось бы избежать. thx.


Ну если я тебя правильно понял, то вот:

// Создаем графику
Graphics g = this.CreateGraphics();
// Масштабируем — почему именно Convert.ToSingle — а фиг знает.
// Если пишешь туда дробные числа (т.е. уменьшаешь масштаб) — компилятор ругается
// что не может конвертнуть "дабл" во "флоат". В данном случае увеличиваем масштаб в 5 раз
g.ScaleTransform(Convert.ToSingle(5),Convert.ToSingle(5));
// Ну а потом — соответственно рисуешь и пишешь то, что хотел
g.DrawImage (ну и там дальше что, я не знаю, этой функцией не пользовался).

Андрей
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re[2]: DrawImage() без сглаживания
От: kiple Россия  
Дата: 07.10.04 16:30
Оценка:
Здравствуйте, Unforgiver, Вы писали:

U>Ну если я тебя правильно понял, то вот:


Спасибо, но, к сожалению, данный способ так же выводит сглаженное изображение.
Мне надо, что бы, например, черная точка на белом фоне при увеличении изображения в n раз выводилась в виде черного квадрата n*n, а не серым интерполированным пятном.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[2]: DrawImage() без сглаживания
От: Аноним  
Дата: 07.10.04 17:17
Оценка:
protected override void OnPaint(PaintEventArgs e)
  {    
   base.OnPaint(e);
   Image image = Bitmap.FromFile("app.ico");
   e.Graphics.DrawImage(image,0,0,new Rectangle(0,0,image.Width,image.Height),GraphicsUnit.Pixel);   
   e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
   e.Graphics.DrawImage(image,0,50,new Rectangle(0,0,image.Width*20,image.Height*20),GraphicsUnit.Pixel);   
  }


InterpolationMode.NearestNeighbor — самый низкий по качеству режим сглаживания. Получаеться очень похоже на, что вам нужно.

Я могу ошибаться, но ничего другого с использованием DrawImage вы не добьетесь.



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DrawImage() без сглаживания
От: kiple Россия  
Дата: 12.10.04 17:59
Оценка:
Здравствуйте, Daima, Вы писали:

D>InterpolationMode.NearestNeighbor — самый низкий по качеству режим сглаживания. Получаеться очень похоже на, что вам нужно.


D>Я могу ошибаться, но ничего другого с использованием DrawImage вы не добьетесь.


Да это действительно то, что мне надо. thx. Только еще необходимо установить Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half, иначе картинка получается сдвинутой на полпикселя.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.