А есть разница? то что ушло в гди - доступа у нас уже нет.
Алекс на этой битмапке чтото рисует наивно думая что там рисуется чтото средствами lcl. нет, это гди рисует, на своей копии, у нас от нее только хендл.
Когда нам приспичивает мы лочим битмапку BeginUpdate - получаем ее содержимое, работаем с ним, потом разлочим EndUpdate - наша копия улетает обратно в потроха гди. Переодически мы можем получить все изображение RawImage или небольшую копию без лока всей картинки, в режиме только на чтение - вот ваш сканлайн.
Уж незнаю почему, наверно чтоб минимизировать передачу данных принята передача строчки изображения.
- Код: Выделить всё
property RawImage: TRawImage read GetRawImage; // be carefull with this, modify only within a begin/endupdate
Надеюсь ты это уже видел? в момент обращения к RawImage выполняется GetRawImage - оно и получает копию гди изображения в доступ.
тоже самое с
- Код: Выделить всё
property ScanLine[Row: Integer]: Pointer read GetScanLine; platform; // Use only when wrpped by a begin/endupdate
это никакие не указатели на пиксели, это функции берущие изображения откудато и возвращающие нам на него указатели
причем перегон изображений гди-цпу и цпу-гди ОЧЕНЬ ДОРОГИЕ процедуры.
>>А в BGRA - это выглядит так:
емнип bgra, agg - не используют видюху (читал про gl версию bgra, но неглядел) и сами своими силами рисуют в RawImage или аналог - тут перегон картинки осуществляется только чтоб ее отобразить. Но от этого не легче.
Имеем:
подход LCL - используется ускорение видеокарты, но дорого гонять картинки тудасюжа
подход bgra, agg - гонять ненадо т.к. в памяти постоянно актуальная копия. но процом рисовать на порядки медленнее чем видюхой