forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Копирование в буфер криволинейной области (http://forum.boolean.name/showthread.php?t=16723)

MoltoBene 29.04.2012 13:30

Копирование в буфер криволинейной области
 
Всем привет!
Можно ли какими-нибудь средствами копировать в буфер криволинейные области?
Например, дано изображение. Нужно скопировать его кусок неправильной криволинейной формы, скажем, в другое изображение, желательно, чтобы часть изображения за границами скопированной области была прозрачной.
CopyRect не подойдет - он только для прямоугольных областей. А ReadPixel/ReadPixelFast в данном случае будет медлительным. Необходимо, чтобы перенос фрагмента, ограниченного криволинейной областью, происходил в реалтайме. + область должна быть динамической, изменяться по заданной формуле (какой-либо).
То есть, значения формулы меняются, границы копирования меняются соответственно, из первого изображения во второе переносится соотвественный кусок.
Прошу прощения, возможно, написал не очень корректно, но надеюсь, что к телепатии вам прибегать не придется.
Подскажите, пожалуйста, каким способом это можно реализовать? заранее спасибо!

radiobutton 30.04.2012 00:50

Ответ: Копирование в буфер криволинейной области
 
копировать по пиксельно.

вычислять какие пиксели убрать , а какие добавить с помощью математики. +) используя формулы контуров, после каждого изменения формулы или значений переменных в этой формуле.

Brain 01.05.2012 21:12

Ответ: Копирование в буфер криволинейной области
 
Вложений: 1
В принципе, скорость копирования пикселей ReadPixelFast/WritePixelFast довольно приемлемая: см. вложения.

Если вам необходимо копировать изображения почти мгновенно, то используйте FastImage (кстати, не бесплатная) - попробовать можно тут http://fastlibs.com/
В этой библиотеке есть специальная функция на такие случае: DrawPoly, пример использования в файле fast.bb (там используется xors3d, но обойтись можно и без него)

Что интересно, скорость обработки изображений в дебаге и в финальной сборке отличается на порядок для чистого блитца, что не относится к аналогичному случаю с библиотекой. Это объясняется тем, что в Blitz3D при дебаге код не компилируется, а интерпретируется. Следовательно скомпилированный проект будет работать быстрее. Так что, возможно и чистого Blitz3D вам хватит.
Алгоритм, подобный приложенному, использовать не стоит, так как он медлителен при большом количестве точек и подходит только для выпуклых многоугольников.
Почитать о многоугольниках можно тут:
Для выпуклых
Для всех

Скомпилированные файлы лежат тут http://dl.dropbox.com/u/11705841/bin.7z


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

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