Transparent regions and memory low?
От: Аноним  
Дата: 19.01.06 09:29
Оценка:
Хай всем!

Есть проблема оптимизации использования памяти при отрисовке транспарент регионов.
Суть: Делаю контрол который выводит на канву множество обьектов по ZOrder-у, которые представляют собой прямоугольные области которые могут отображать картинки как отчасти прозрачные так и не прозрачные полностью.
1) Случай: Все обьекты не прозрачны полностью тогда все просто — можна не хранить в памяти изображения этих обьектов а сразу выводить на канву; — здесь все OK
2) Случай: Все обьекты могут быть отчасти прозрачными, здесь возникает проблема — так как перед тем как рисовать частично транспарентную облать нужно восстановить то место где будет происходить отрисовка частично транспарентной области; — как этот случай можна обойти??? Кроме как держать все обьекты в памяти ничего не приходит
3) Случай: Смешанній вариант 1) и 2)

Спасибо!
Re: Transparent regions and memory low?
От: What Беларусь  
Дата: 19.01.06 14:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>Есть проблема оптимизации использования памяти при отрисовке транспарент регионов.
А>Суть: Делаю контрол который выводит на канву множество обьектов по ZOrder-у, которые представляют собой прямоугольные области которые могут отображать картинки как отчасти прозрачные так и не прозрачные полностью.
А>1) Случай: Все обьекты не прозрачны полностью тогда все просто — можна не хранить в памяти изображения этих обьектов а сразу выводить на канву; — здесь все OK
А>2) Случай: Все обьекты могут быть отчасти прозрачными, здесь возникает проблема — так как перед тем как рисовать частично транспарентную облать нужно восстановить то место где будет происходить отрисовка частично транспарентной области; — как этот случай можна обойти??? Кроме как держать все обьекты в памяти ничего не приходит
Ничего не понятно. Что значит "нужно восстановить то место где будет происходить отрисовка частично транспарентной области"? Что восстанавливать? Зачем? Как?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Transparent regions and memory low?
От: Аноним  
Дата: 19.01.06 16:38
Оценка:
Здравствуйте, What, Вы писали:

W>Здравствуйте, <Аноним>, Вы писали:

А>>Есть проблема оптимизации использования памяти при отрисовке транспарент регионов.
А>>Суть: Делаю контрол который выводит на канву множество обьектов по ZOrder-у, которые представляют собой прямоугольные области которые могут отображать картинки как отчасти прозрачные так и не прозрачные полностью.
А>>1) Случай: Все обьекты не прозрачны полностью тогда все просто — можна не хранить в памяти изображения этих обьектов а сразу выводить на канву; — здесь все OK
А>>2) Случай: Все обьекты могут быть отчасти прозрачными, здесь возникает проблема — так как перед тем как рисовать частично транспарентную облать нужно восстановить то место где будет происходить отрисовка частично транспарентной области; — как этот случай можна обойти??? Кроме как держать все обьекты в памяти ничего не приходит
W>Ничего не понятно. Что значит "нужно восстановить то место где будет происходить отрисовка частично транспарентной области"? Что восстанавливать? Зачем? Как?

Допустим что j — ый непрозрачный обьект-прямоугольник поменял свое отображение, тогда в первом случае, если он не перекрывается другими обьектами-прямоугольниками — то можна прямиком перерисовать на канве область занимаемую j — м обьектом-прямоугольником так как он не прозрачный и беспокоится о том что было там до этого не нужно и память держать под графику этого обьекта тож не нужно.
Но вот такое не получается проделать из частично прозрачными обьектами так как нужно восстановить облать до того как рисовать транспарентную облать
Re[3]: Transparent regions and memory low?
От: What Беларусь  
Дата: 19.01.06 17:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Допустим что j — ый непрозрачный обьект-прямоугольник поменял свое отображение, тогда в первом случае, если он не перекрывается другими обьектами-прямоугольниками — то можна прямиком перерисовать на канве область занимаемую j — м обьектом-прямоугольником так как он не прозрачный и беспокоится о том что было там до этого не нужно и память держать под графику этого обьекта тож не нужно.

А>Но вот такое не получается проделать из частично прозрачными обьектами так как нужно восстановить облать до того как рисовать транспарентную облать

Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.

P.S. Я так понял, что "частично прозрачный обьект" — это объект, у которого некоторые части полностью прозрачны, некоторые полностью непрозрачны. То есть полупрозрачности нет. Хотя в данном случае это ни на что не влияет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Transparent regions and memory low?
От: Аноним  
Дата: 19.01.06 17:27
Оценка:
Здравствуйте, What, Вы писали:

W>Здравствуйте, <Аноним>, Вы писали:


А>>Допустим что j — ый непрозрачный обьект-прямоугольник поменял свое отображение, тогда в первом случае, если он не перекрывается другими обьектами-прямоугольниками — то можна прямиком перерисовать на канве область занимаемую j — м обьектом-прямоугольником так как он не прозрачный и беспокоится о том что было там до этого не нужно и память держать под графику этого обьекта тож не нужно.

А>>Но вот такое не получается проделать из частично прозрачными обьектами так как нужно восстановить облать до того как рисовать транспарентную облать

W>Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.


Это все равно что перерисовать все — так как те прямоугольники что пересекают j — ый тож могут быть частично прозрачными и для них тож придется искать в свою очередь пересечения с другими что бы восстановиться.

Дело в том что на покете мало оперативной памяти да и быстродействие плохое
А с полной перерисовкой полный копец

W>P.S. Я так понял, что "частично прозрачный обьект" — это объект, у которого некоторые части полностью прозрачны, некоторые полностью непрозрачны. То есть полупрозрачности нет. Хотя в данном случае это ни на что не влияет.


Да. Правильно.
Re[5]: Transparent regions and memory low?
От: What Беларусь  
Дата: 19.01.06 17:44
Оценка:
Здравствуйте, <Аноним>, Вы писали:

W>>Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.


А>Это все равно что перерисовать все — так как те прямоугольники что пересекают j — ый тож могут быть частично прозрачными и для них тож придется искать в свою очередь пересечения с другими что бы восстановиться.


Не нужно. Ну и что, что они частично прозрачны? Мы устанавим регион отсечения по изменившейся области.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Transparent regions and memory low?
От: What Беларусь  
Дата: 19.01.06 17:46
Оценка:
Здравствуйте, What, Вы писали:

W>>>Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.


А>>Это все равно что перерисовать все — так как те прямоугольники что пересекают j — ый тож могут быть частично прозрачными и для них тож придется искать в свою очередь пересечения с другими что бы восстановиться.


W>Не нужно. Ну и что, что они частично прозрачны? Мы устанавим регион отсечения по изменившейся области.


P.S. А если имеем дело с растрами, то вместо региона отсечения можно самим найти прямоугольник пересечния текущего растра и изменяемой области и делать блитинг только этого прямоугольника.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Transparent regions and memory low?
От: Аноним  
Дата: 19.01.06 17:53
Оценка:
Здравствуйте, What, Вы писали:

W>Здравствуйте, <Аноним>, Вы писали:


W>>>Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.


А>>Это все равно что перерисовать все — так как те прямоугольники что пересекают j — ый тож могут быть частично прозрачными и для них тож придется искать в свою очередь пересечения с другими что бы восстановиться.


W>Не нужно. Ну и что, что они частично прозрачны? Мы устанавим регион отсечения по изменившейся области.


Точно. Как я раньше не подумал об этом
Re[7]: Transparent regions and memory low?
От: Аноним  
Дата: 19.01.06 17:59
Оценка:
Здравствуйте, What, Вы писали:

W>Здравствуйте, What, Вы писали:


W>>>>Находим прямоугольник, в котором произошли изменения. Очищаем (закрашиваем цветом фона). Рисуем согласно z-порядку все объекты, прямоугольник которых пересекается с прямоугольником, в котором произошли изменения.


А>>>Это все равно что перерисовать все — так как те прямоугольники что пересекают j — ый тож могут быть частично прозрачными и для них тож придется искать в свою очередь пересечения с другими что бы восстановиться.


W>>Не нужно. Ну и что, что они частично прозрачны? Мы устанавим регион отсечения по изменившейся области.


W>P.S. А если имеем дело с растрами, то вместо региона отсечения можно самим найти прямоугольник пересечния текущего растра и изменяемой области и делать блитинг только этого прямоугольника.


Единственно — достаточно сложно будет реализовать что бы прямоугольник себя мог частично перерисовывать — там не только растры и заливки и всякие линии фигурки могут отрисовыватся и это должно рисоватся без выделения дополнительной памяти
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.