![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В поисках пикселя - benchmark [D5, Win95/98]
Mihey © (2004-03-25 17:28:00)Ради интереса производил тестирование скорости доступа к пикселям различными средствами: TCanvas.Pixels, Scanline, QPix(TQuickPixels, статья на сайте, а одним из авторов скромно выступил MBo, если не ошибаюсь) и Graphic32( http://www.g32.org, делал тоже наш - Alex Denisov). Для замерения времени был выбран компонент THPCounter- высокоточный таймер, точность до 0,000001 секунды.
Было создано 4 проекта, в которых реализовывалась одна и та же задача: просканировать изображение 800x600с глубиной цвета 24bitи присвоить значение переменной. Измерялась скорость только от начала сканирования до его завершения.
Значение в обычном случае присваивалось переменной типа TColor. Для Scanline была использована функция RGBToColorследующего вида:
function RGBToColor(R,G,B:Byte): TColor;
begin
Result:=B Shl 16 Or
G Shl 8 Or
R;
end;
Проблема вышла с Graphic32. Дело в том, что этот графический пакет определяет свой класс TBitmap32для работы с битмапами, используя при этом свой класс TColor32для хранения цвета - обычный TColor с альфа-каналом. С одной стороны, TColor32 используется в Graphic32 везде и в пределах работы с Graphic32 конвертации не требуется. С другой стороны, хотел соблюсти строгость теста, поэтому в одном из результатов использовалась функция WinColor, возвращающая TColor из TColor32.
Результаты были замерены несколько раз, на глаз выбрано что-то среднее, что ( !) не меняет картину результатов.
Тест выполнялся на компьютере PII 400 MHzс 64 Mb RAM, Win 98.
=====
TCanvas.Pixels
Этот способ показал самый медленный результат - 1.91 секунды.
=====
Scanline
Использовать этот метод довольно неудобно, но тем не менее он дал вполне приемлемый результат - 0.04 секунды.
=====
QPix
Мне он показался очень удобным. создаёшь переменную класса TQuickPixels, присоединяешься к битмапа и всё. Он показал очень хорошую скорость: 0.026 секунды! Пожалуй, если вы хотите работать в переделах класса TBitmap, то используйте этот способ.
=====
Graphic32
Использовать этот графический пакет очень просто. К обычному классу прибавляется постфикс 32 и всё. Теперь подробнее о результатах.
Присваивание переменной типа TColor32 дало результат 0.027 секунды при использовании метода TBitmap32.Pixel sи самый быстрый результат - 0.02 секунды при использовании TBitmap32.Pixel. Поясняю различие: при использовании Pixels учитывается, что координаты пикселя могут выйти из граний изображения, и тогда вернётся некоторое значение OuterColor. Очевидно, что функцию замедляет проверка.
Однако использование TBitmap32.Pixel вместе с функцией WinColor дало результат 0.04 секунды на всё изображение.
Mihey (2004-03-31 20:28:00) [1]> А смысл какой выводить спрайты попиксельно?
Я тоже против этого.
cyborg (2004-03-31 10:26:00) [2]
> >У меня в игре, например, радар пикселями выводится.
>
> Ну не Чебуратор же сам и не тайлы?
А смысл какой выводить спрайты попиксельно?
Mihey (2004-03-30 23:48:00) [3]> Лучше скажи просто, что тебе лень делать 16 битовый режим в спрайт утилсах :)
Нет, мне не лень, но мне нужна работа с 32-битными изображениями (привык за время работы с Graphic32). Это ж такой кайф, когда изображение вращается и края красиво сглажены, да и вообще, маска прозрачностей - это крутая штука.
> Качество почти такое, же, как у 32 битового режима, но работает в два раза быстрее, и более чем в два раза быстрее 24 битового режима.
И ничего хорошего. Закономерность. Работало бы с такой же скорость при 24-bit - респект, а так - просто программерское решение повысить скорость за счёт графики. Если игра по сути интересная - тогда можно, но сейчас такое не катит.
> У меня в игре, например, радар пикселями выводится.
Ну не Чебуратор же сам и не тайлы? Альфа-блендинг походу тоже попиксельно придётся.
cyborg (2004-03-30 23:22:00) [4]
> Я ж говорил, что ты по-DirectX'овски мыслишь. Ну какой вывод
> спрайтов на пикселях???
У меня в игре, например, радар пикселями выводится.
cyborg (2004-03-30 23:18:00) [5]Лучше скажи просто, что тебе лень делать 16 битовый режим в спрайт утилсах :)
Качество почти такое, же, как у 32 битового режима, но работает в два раза быстрее, и более чем в два раза быстрее 24 битового режима.
cyborg (2004-03-30 23:15:00) [6]Видел.
Mihey (2004-03-30 23:07:00) [7]> А оно надо?
А как-же. Неужели не видел новых игр?
cyborg (2004-03-30 21:56:00) [8]
> Кроме того, нет теней и нет антиалиясинга.
А оно надо?
Mihey (2004-03-30 21:29:00) [9]Выглядит неплохо, но синий, зелёный красный, а уже светло-синих оттенков на всю стадию не хватит. Кроме того, нет теней и нет антиалиясинга.
cyborg (2004-03-30 20:44:00) [10]тю блин, не то дал :)
в том же порядке:
http://www.cyborghome.ru/images/cheburator/screenshots/ScreenLevel1-1.png
http://www.cyborghome.ru/images/cheburator/screenshots/ScreenLevel2-1.png
http://www.cyborghome.ru/images/cheburator/screenshots/ScreenLevel3-1.png
cyborg (2004-03-30 20:43:00) [11][42] Kom Zu Mir (30.03.04 00:09)
Посмотри нормальные скриншоты:
Синие оттенки 115 кб.
http://www.cyborghome.ru/images/cheburator/screenshots/SmallScreenLevel1-1.jpg
Красный оттенок 220 кб.
http://www.cyborghome.ru/images/cheburator/screenshots/SmallScreenLevel2-1.jpg
Зелёный оттенок 204 кб.
http://www.cyborghome.ru/images/cheburator/screenshots/SmallScreenLevel3-1.jpg
Kom Zu Mir (2004-03-30 20:37:00) [12]http://www.torry.net/vcl/datetime/timers/mahpcounter.zip
miek (2004-03-30 16:52:00) [13]В этой задаче незавем использовать компоненты для работы с графикой, лучше просто сравнивать массивы в памяти.
naum (2004-03-30 12:56:00) [14]Отличная ветка! То что давно уже искал! Здесь столько мастеров графики, что я думаю кто-нибудь мне поможет: стоит задача быстро-быстро сравнить 2 растра 10000х10000 черно-белые и результат (зеленым - то что есть на 1 и нет на 2, красным - то что есть на 2 но нет на 1) вывести на растр 10000х10000 (соответственно минимум 8бит). Сейчас использую компонент от HiComponents, ImageEn. Использую ScanLine - на машине Duron700, 256mb - показывает за 22 сек. :((((( В то время как ImageEn показал себя по скорости доступа к пикселам намного лучше всех, даже QPixels и Graphic32! Если у кого есть немного времени помочь со сложившейся ситуацией - помогите. Если можно то предложения о помощи мне на мыло :-) Сам с графикой никогда не работал - я геодезист :)
Pul (2004-03-30 12:48:00) [15]>>Mihey
Кинь пожалуйста ссылку на THPCounter, или вышли по почте
dmk (2004-03-30 02:04:00) [16]>Это ж скорость рендеринга, а не вывода. Попробуй вывести на
>экран, сразу поплохеет, особенно через GDI.
Скорость вывода с помощью GDI ~ 350 Fps. 800x600x32
Много это или мало - не знаю.
cyborg (2004-03-30 00:35:00) [17]Это не я скриншоты снимал ;).
Kom Zu Mir (2004-03-30 00:33:00) [18]Ну ты догадался... И всё ещё 140 Кб? Сделай через JPG высокого качества и пусти на оптимизатор.
cyborg (2004-03-30 00:12:00) [19]PNG там в 8 битовом формате
Kom Zu Mir (2004-03-30 00:09:00) [20]> У меня игра в 16 бит и всё пучком.
Посмотри, какие шарики:
http://www.cyborghome.ru/images/cheburator/screenshots/cheburator_test03_lab_3.png
А вот синий левел очень плох в плане оттенков:
http://www.cyborghome.ru/images/cheburator/screenshots/cheburator_test03_night_2.png