![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| _beginner_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.2.2007 Где: Россия Репутация: нет Всего: нет |
объясните, как быстро выводить графику с ScanLine[] и PByteArray.
Как к примеру вывести пиксел красного цвета в левом верхнем углу формы или нарисовать линию? |
|||
|
||||
| s-mike |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Для формы ScanLine не даст никакого ускорения, поскольку этим методом можно рисовать только на битмапе. То есть придется создавать временный битмап, выводить на нем изображение с помощью ScanLine и уже потом выводить на форму. Это не даст никакого прироста производительности. А для вывода линий ScanLine вообще использовать противопоказано, поскольку оптимальный алгоритм и так уже реализован в функции LineTo. |
|||
|
||||
| _beginner_ |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.2.2007 Где: Россия Репутация: нет Всего: нет |
просто я один примерчик нашёл с быстром выводом графики:
мне вот непонятно как он работает? Можно ли так быстро по одному пикселу выводить или нет?
Это сообщение отредактировал(а) Alexeis - 4.2.2007, 15:40 |
||||
|
|||||
| s-mike |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Можно, выводит ведь Почему ScanLine быстрее Pixels? ScanLine модифицирует данные напрямую в памяти, без вызова функций Windows API (SetPixel) и вызова protected-метода TBitmap под названием Changed, который приводит к перерисовку битмапа, если он к тому же присвоен какому-то компоненту вроде TImage. Но это не значит, что ScanLine позволит более быстро выводить линии/окружности и т.п. Функции GDI как правило работают напрямую с устройством вывода (если это вывод на экран - то с видеокартой) и не рассчитывают координаты той же окружности математически, все это делает видеокарта. |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: нет Всего: 8 |
2s-mike:
Вообще-то иногда вывод в Bitmap с последующей его прорисовкой это лучший вариант, если надо нарисовать сложное изображение, т.к. при выводе непосредственно, изображение может "мерцать", при прорисовке в Bitmap этого не происходит. Так-же это может быть полезно при выводе чего-то не стандартного, для чего нет APIшной функции, например градиент какой-нибудь и т.д. 2beginner: Функция ScanLine[Y] возвращает ссылку на массив цветов точек из строки Y. Формат этого массива зависит от формата Bitmap. В приведенном тобой примере (bm.PixelFormat := pf24bit;) на каждую точку приходится три байта (R, G, B по одному байту на цвет), соответственно: p^[x*3] := x+y; // Устанавливается яркость синего цвета для точки X, Y p^[x*3+1] := x-y; // Зеленый p^[x*3+2] := y-x; // Красный |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |