Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 16:10   #1
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
Радость Растягивание изображение

Недавно задумался, как экраны растягивают изображение. Например у нас есть экран 320х240 и нам нужно растянуть его по x и y в 1,5 раза до 480х360, экран ведь неможет каждый пиксель увеличить в 1,5 раза. А если увеличивать в два раза каждый второй пиксель получиться весьма странная картинка.

Подскажите однофорумчане как это происходит.
Gapro вне форума Ответить с цитированием
Старый 05.01.2012, 16:25   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Экстраполяция?
Вадим Мошев вне форума Ответить с цитированием
Старый 05.01.2012, 16:27   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно подсмотреть здесь и здесь и здесь и много еще где, если погуглить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2012, 16:51   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Увеличивать на 1,5 - просто. К примеру, я для эмулятора Dendy (исходный размер видеобуфера 256x240) делал следующее.

Например, если мы хотим выводить 1:1, то тут все стандартно:
Код:
for (y=0;y<240;y++) { 
   for (x=0;x<256;x++) { 
     color = pWf[ ( y << 8 ) + x ]; //pWf - буфер, в котором  формируется изображение эмулятора. 256x240 
     pFb[y * 480 + x] = color; //pFb - фреймбуфер. 480x272 

} 
}
Здесь изображение появится на экране в верхнем левом углу. А вот так вот можно растянуть на 1,5 по ширине:
Код:
for (y=0;y<240;y++) { 
   for (x=0;x<256;x++) { 
     color = pWf[ ( y << 8 ) + x ]; //pWf - буфер, в котором  формируется изображение эмулятора. 256x240 
     int p = y * 480 + ((x+x+x)>>1); // (x*3) / 2 
     pFb[p] = color; //pFb - фреймбуфер. 480x272 
     if (x&1) pFb[p+1] = color; // если четный x, то рисуем еще один  пиксель справа. 

} 
}
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Растягивание формулы fadsozaur Microsoft Office Excel 28 08.08.2013 17:54
Растягивание фигур. KOPC1886 C# (си шарп) 4 03.05.2011 13:04
Растягивание фона psywalker HTML и CSS 7 19.06.2008 18:08
Растягивание имиджа! Marsik Помощь студентам 20 07.11.2007 18:56