Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 15:51   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Помогите разобраться с HBITMAP (ускорить перенос пикселей)

Нужно сделать поворот картинки на 90°. Я его сделал, с одной канвы на другую попиксельно, но он медленно работает. Можно было бы со Scanline чуть ускорить, но мне кажется тут он бесполезен, т.к. считать то я считаю строкой, а перекидывать то строкой не выйдет, она же горизонтальная, по любому попиксельно перекидывать придется.

Нашел вроде решение здесь http://www.codenet.ru/progr/video/rotate.php
Но не могу сходу сообразить, как это все в Дельфи перевести и к моим битмапам прикрутить (Source, Dest: TBitmap). И второй нюанс, мне не нужен произвольный угол, а просто поворот путем переноса точек, без потерь (это важно), по формуле не нужно. Т.е. мне от этого алгоритма нужна только скорость доступа.

p.s. Всякие библиотеки не подходят (знаю про них), т.к. программа уже написана, просто нужно функцию добавить.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 08.12.2009, 17:13   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

GetDIBits, CreateDIBSection и так далее... Вычислять матричное (x,y) соответсвенно тк эти функции возвращают кусок памяти целиком а не сканлайн. И исчо, работать с 32 битными пикселями.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 08.12.2009, 18:22   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
т.к. считать то я считаю строкой, а перекидывать то строкой не выйдет, она же горизонтальная, по любому попиксельно перекидывать придется.
Странно.. а такое?
scan0 - указатель на начало бит данных
width - ширина области
4 - размер в байтах на пиксель
Код:
pixelXeq25Yeq40 = (*(unsgined int*)((int)scan0 + (40 * width + 25) * 4))
И пожалуйста, вытаскивайте и обращайтесь к любому пикселю
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите ускорить процесс копирование столбцов с ГПР sergiksergik Microsoft Office Excel 2 21.05.2009 20:46
помогите ускорить работу программы... Pashtet Паскаль, Turbo Pascal, PascalABC.NET 5 25.11.2008 22:12
Вывод HBITMAP AidarBik Win Api 7 30.07.2008 14:21
Помогите пожалуйста ускорить работу по реконструкции моста Геодезистка Помощь студентам 10 07.10.2007 00:05
Перенос слов по слогам (не могу разобраться с алгоритмом) Only Love Помощь студентам 1 21.05.2007 22:43