Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VC#] Image - Zoom - pixels, Как увеличивать изображения(не размазыва 
V
    Опции темы
MuForum
  Дата 26.9.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



Доброе время суток.
- Столкнулся со следующей проблемой.

# Задача: Необходимо масштабировать изображение таким образом, чтобы картинка не размазывалась, а отображалась по пиксельно(как в 'ACD Photo Editor 3' и подобных программах.)

- Проблема в том, что когда приближаешь, картинка становится не чёткой, а мне необходимо работать визуально с пикселями. (Делаю графический редактор игровых карт)

# Код масшатибрования:
Код

        public static Bitmap ScaleByPercent(Bitmap imgPhoto, int Percent)
        {
            Bitmap bmPhoto = null;
            // ----
            try
            {
                float nPercent = (float)Percent / 100;
                // ----
                int sourceWidth = imgPhoto.Width;
                int sourceHeight = imgPhoto.Height;
                int sourceX = 0;
                int sourceY = 0;
                // ----
                int destX = 0;
                int destY = 0;
                int destWidth = (int)(sourceWidth * nPercent);
                int destHeight = (int)(sourceHeight * nPercent);
                // ----
                bmPhoto = new Bitmap(destWidth, destHeight);
                bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
                // ----
                // Scale the bitmap in high quality mode.
                using (Graphics grPhoto = Graphics.FromImage(bmPhoto))
                {
                    grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    grPhoto.DrawImage(imgPhoto,
                        new Rectangle(destX, destY, destWidth, destHeight),
                        new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
                        GraphicsUnit.Pixel);
                }
            }
            catch (Exception) { bmPhoto = null; }
            // ----
            return bmPhoto;
        }



# ACD Photo Editor: user posted image
# Используемый вариант: user posted image


Это сообщение отредактировал(а) MuForum - 26.9.2008, 15:57


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
Zakonnic
Дата 26.9.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 2
Всего: 6



По идее такого эффекта не должно быть при увеличении. Дело похоже в фильтрации, а значит сойдет и обычный Bicubic, а не HighQualityBicubic. Последний вроде лучше применять при уменьшении размеров. В крайнем случае - InterpolationMode.NearestNeighbor, он точно смазывать не будет. 

А если надо пиксели отображать точно, то просто масштабирование нужно делать в целое число раз - в 2,3,4 и т.д. По другому картинка не может масштабироваться без артифактов.

Это сообщение отредактировал(а) Zakonnic - 26.9.2008, 16:52
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
MuForum
Дата 26.9.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



Цитата(Zakonnic @ 26.9.2008,  16:34)
Если нужна четкая граница вместо сглаживания можно попробовать InterpolationMode.NearestNeighbor вместо HighQualityBicubic.
А вообще картинка не может масштабироваться без артифактов.

Благодарю за подсказку, вопрос решён  smile 

P.S. -> Если можно, то хотелось бы больше узнать о 'А вообще картинка не может масштабироваться без артифактов.'.

Это сообщение отредактировал(а) MuForum - 26.9.2008, 16:39


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
Zakonnic
Дата 26.9.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 2
Всего: 6



А чего тут узнавать? Экран у тебя из пикселей. Допустим взял и увеличил изображение в 1.5 раза. Куда полпикселя девать? Вот и смешиваются цвета.

ЗЫ. Медленно доходит. Артефакты:
Цитата

В компьютерной графике — нежелательные особенности изображения, сгенерированного компьютером, появляющиеся в определённых условиях (переходы яркости или цветности, движение изображения, режимы вывода, предназначенные для ускорения работы, недостаточно качественная компрессия текстур и так далее). Внешне могут выглядеть как муар, искажения цветов, негладкие линии, несовместное движение частей изображения, «щели» между полигонами и прочее.
 smile

Это сообщение отредактировал(а) Zakonnic - 26.9.2008, 17:02
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1361 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.