forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   ReadPixel , PixMaps, Снимок экрана (http://forum.boolean.name/showthread.php?t=4629)

Данил 02.10.2007 18:52

ReadPixel , PixMaps, Снимок экрана
 
Несколько тупых вопросов по блитзмаксу...

В общем, как обычнО, что-то делаю... делаю, и вот наткнулся на несколько проблем...

Как узнать цвет пикселя на экране? Вроде ReadPixel,а вроде и нет...
Для чего нужна Pixmaps?
Как сделать снимой экрана? И, допустим, как преобразовать получившийся снимок в картинку?

Вот.. как я понял, это все взаимосвязано.. но что и как - хз. Сам не смог разобратся...

Вроде надо организовать pixmap, и с помощью него и будет работать read pixel и можно будет делать снимок... а вообще как это все в коде реализовать... хы...

И вот еще вопрос. Если делать полноэкранный снимок экрана, преобразовывать его в картинку и сразу же выводить под определенным setblend'ом в реальном времени, это все жутко тормозить будет?


непостижима моей логики эта система.. (

сорри, конечно, но сам не смог... :''((

breadman 02.10.2007 19:48

Re: ReadPixel , PixMaps, Снимок экрана
 
Кстати мне тоже очень интересны эти проблемы)
Так что пожалуста дайт кто-нибудь ответ, и вы поможете
человечеству! =)
Заранее благодарен!

jimon 02.10.2007 20:33

Re: ReadPixel , PixMaps, Снимок экрана
 
TPixmap ето просто масив пикселей :)
TImage ето картинка, то есть масив pixmapов
я думаю абстракция понятна ?
TImage просто позволяет грузить анимационые картинки
где каждый кадр ето отдельный pixmap

в принципе грабим всю картинку в pixmap
там делаем readpixel получает INT
далее побитовым смещением выуживаем нужный нам байт
в INTе 4 байта, тоесть 32 бит сумарно
обычно формат INTа в пиксмапе ARGB, но может быть и другой
что указано в справке
как доставать цвета - покапайтесь на форуме
тут уже был код

к примеру вот как делается скриншот в бмаксе
Local img:TPixmap = GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight())
SavePixmapPNG(img,filename)

в общем хз о тормозности функции
я нигде не использую ее :)

возьмите высокоточный таймер моего производства :-)
и просто померяйте скока времени жрет етот grappixmap :)
теоретически довольно мало должен есть

dimanche13 03.10.2007 13:49

Re: ReadPixel , PixMaps, Снимок экрана
 
хотелось бы добавить, что еще есть Function GrabImage( image:TImage,x,y,frame=0 )
Description: Grab an image from the back buffer.

Данил 05.10.2007 22:03

Re: ReadPixel , PixMaps, Снимок экрана
 
Цитата:

теоретически довольно мало должен есть
Вот так сделал для копирования всего экрана и вывода сразу же под определенным SetBlend. Получилось очень красиво, аля эффект свечения. Но стало настолько тормозить... в общем функция GrabImage полноэкранная жрет 400 мс. Это ужс.. то есть 2 фпс в секунду при ней... Я думаю, как-то можно ведь обойти это...

..::Добавил::..


Попробовал функцией Жимона.. вот... 32 мс тратит GrapPixmap. Если с сохраненим - около 300 мс. гы, а если выводить просто пихмапу - 30 мс. около 35 фпс. И аля тот же эффект.

Вывод
- жимон прав). И функцию grabimage лучше не использовать, ибо тормазнутая.

jimon 05.10.2007 23:43

Re: ReadPixel , PixMaps, Снимок экрана
 
Данил
свечение к картинкам лутче сразу в фотошопе добавить
ибо пост еффекты нужно сводить к минимуму

oxid 28.11.2007 01:36

Re: ReadPixel , PixMaps, Снимок экрана
 
Если нужен постэффект типа блюра или размытия картинки, он делается на основе работы с CLS:
0 - CLS
1 - рисуем сцену (с прозрачностью в .5)
2 - рисуем сцену со смещением и прозрачность .5
3 - флип, переход на 0
Пунктов 1,2 может быть разное количество, в зависимосте от него подбираешь альфу.
Так будет рисоваться быстрее - не будет тормозной операции GrabImage

хинт 2: вместо CLS можно использовать отрисовку моноцветной картинки с нужным цветом - ускорение.

хинт 3: для экономии памяти куртинку для затычки CLS можно сделать из одного пикселя и скалить ее под размер окна, а не делать целый пиксмап под его размер.

Убыстрить снимок с экрана можно только очень сложным способом (теоретически) - написать в асме оптимизированный код. Для грабинга используется стандартный функционал ДХ, т.е. - это не косяк БМ, а тормоза ДХ. Можно немного оптимизировать работу ДХ, вызвав вместо BitBlt FastBlt в самой процедуре GrabPixmap. (параметры поменять не забудь).

--
гы надо-же раздел по БМ открыли а я токо заметил
ничо что я так поздо - думаю поможет все-же


Часовой пояс GMT +4, время: 17:04.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot