![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: 1 Всего: 1 |
Привет... У меня прога выводит гифовские анимашки на экранчик через USB порт. Беру и в цикле раскладываю каждый кадр в массив RGB и уже этот массив передаю в порт.
Раньше пользовалась GetPixel(); Но уж оочень она медленная - хочу переделать это на GetDIBits ... нашла код ... переписала ... и ошибок не выдаёт - но и в массиве pBits ничего нет !!! Хотя там по моему разумению должен быть растр картинки т.е. RGB сост каждого бита... привожу код Помогите плиз ...
--------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
Попробуй так. Оброти внимание на выделенный текст
BITMAPINFOHEADER bmi = {0}; bmi.biSize = sizeof (BITMAPINFOHEADER); bmi.biWidth = YARD_W*2; bmi.biHeight = YARD_W/2; bmi.biPlanes = 1; bmi.biBitCount = 1; BYTE *lpBits; CreateDIBSection(hdc,(BITMAPINFO*)&bmi,DIB_RGB_COLORS,(void**)&lpBits,NULL,0); --------------------
Experimentia est optima rerum magistra |
|||
|
||||
akahan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 11.2.2007 Репутация: нет Всего: нет |
Вот мой код, который работает! Функция GrayBitmap получает битмап, который обесцвечивает и возвращает обратно.
По аналогии можете найти ошибку в вашем коде или спользовать мой для ваших целей!
Если сделаете по аналогии, то ваш код будет работать гораздо быстрее GetPixel ![]() Это сообщение отредактировал(а) akahan - 24.2.2007, 02:40 |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
akahan, да уж. GetPixel - это тормаз GDI. Слушай, а тебе не нада к твоему коду еще код смешения цвета, чтоб самому прозрачность делать? Если картинка маленькая или не в реалтайме, то можно сделать с автоматическим антиалиасингом (если рисуешь например в Фотошопе). Все картинки так же будут с полупрозрачными краями.
--------------------
Experimentia est optima rerum magistra |
|||
|
||||
akahan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 11.2.2007 Репутация: нет Всего: нет |
MoZy, нет не надо тут ничего добавлять! Какой будет исходный битмап, такой будет и обесцвеченная копия. Если будет с альфа-каналом, то он не изменится!
![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Annuta, дибы не совместимы с девайсом 0. Поэтому в CreateCompatibleDC необходимо передавать девайс экрана. И еще один момент. При использовании 24 битного растра, Каждая строка должна быть выровнена на границе двойного слова. Если хочешь идти по простому пути, то установи 32 бита, тогда pBits будет точно указывать на массив RGBQUAD, который не нужно выравнивать.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
akahan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 11.2.2007 Репутация: нет Всего: нет |
Annuta, вы бы хоть в курсе нас держали, как идет написание кода?
![]() Люблю девушек-кодеров! ![]() Это сообщение отредактировал(а) akahan - 25.2.2007, 09:10 |
|||
|
||||
Annuta |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: 1 Всего: 1 |
Привет народ.. спасибо за наставление - у меня 16 битовый растр - с этим проблем нет... У меня всё получилось Спасибо
akahan... а вот переложить биты RGB правильно не получается... краски плывут... Самое интресное что на одних гифах плывут а на других нет !!! просто мистика какя-то !!! а это моя структура...
А так я вызываю функцию...
... Может кто с такой проблемой знаком ??? Присоединённый файл отображается неправильно... к сожелению не могу поместить сразу два файла... чтобы и тот выложить который правильно работает... Это сообщение отредактировал(а) Annuta - 27.2.2007, 12:18 Присоединённый файл ( Кол-во скачиваний: 15 ) ![]() --------------------
Программист - это комбинация лени и логики ! |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
Annuta, вам GremlinProg, уже рассказал про выравнивание по DWORD, отсюда и мистика, в одном случае ширина картинки кратна 4 == sizeof(DWORD) и все правильно смотрится, в другом случае получаете проблемы с выравниванием и все плывет.
PS картинку вашу форум не дает посмотреть ![]() Это сообщение отредактировал(а) zkv - 28.2.2007, 05:01 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Annuta, действительно, у DIB и зависимого битмапа разное выравнивание: на 4 и на 2 байта соответственно. Поэтому длины строк в общем случае не совпадают. За этим нужно следить при перекладывании информации туда-сюда..
-------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |