![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
пишу примерно вот так:
получаю обьекты на экране и пустой .bmp файл. Подскажите почему вывода в файл не происходит? Смотрел файл в winHex: 424D46270000000000003600000028000000320000003200000001002000000000001027000000000000000000000000 остальное нули, т.е. создается файл , правильно формируется его заголовок, но пустой... Гуглил и нашел примеры, которые дали такой же результат. На всякий случай прилагаю пример проекта(проблема в Lab.cpp) . Присоединённый файл ( Кол-во скачиваний: 3 )
test.zip 29,36 Kb |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
ошибка похоже тут:
после выполнения этого Buf остается пустым |
|||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: 1 Всего: 1 |
Может сначала надо сделать CompatibleDC, потом CompatibleBitmap, потом связать их SelectObject, затем скопировать обьекты с экрана в битмап, а потом уже сохранять битмап. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
только что же обсуждали GetDIBits: http://forum.vingrad.ru/forum/topic-257353...bits/index.html
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
GremlinProg,
непомогла мне та тема |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
mekhanikus,
делаю так: hdc = BeginPaint(hWnd, &ps); BITM=CreateCompatibleBitmap(hdc, Width, Heigth); т.е. есть холт и битмап вывожу обьекты на холст: for ( int i=0; i<Obts.size(); i++ ) Obts[i]->Draw(hdc, Xo*2, Yo*2); а потом копирую с холтса на битмап: StoreBitmapFile(_T("1.bmp"),BITM); т.е. вот копирую содержимое: DataSize = ((BM.bmWidth*BitCount+31) & ~31)/8*BM.bmHeight; Buf = (LPBYTE)GlobalAlloc(GMEM_FIXED, DataSize); DC = GetDC(0); GetDIBits(DC, HBM, 0,(WORD)BM.bmHeight, Buf, BIP, DIB_RGB_COLORS); ReleaseDC(0, DC); и вот тут созраняю содержимое: WriteFile(FP,&BFH,sizeof(BITMAPFILEHEADER),&dwTemp,NULL); WriteFile(FP,BIP,sizeof(BITMAPINFOHEADER) + BIP->bmiHeader.biClrUsed * sizeof(RGBQUAD),&dwTemp,NULL); WriteFile(FP,Buf,DataSize,&dwTemp,NULL); только Buf оказывается пустым после: DC = GetDC(0); GetDIBits(DC, HBM, 0,(WORD)BM.bmHeight, Buf, BIP, DIB_RGB_COLORS); ReleaseDC(0, DC); |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
выравнивание необходимо для каждой строки:
+ GetDIBits возвращает число строк, скопированных с битмапа если она возвращает ноль, то GetLastError дает код ошибки если не ноль, значит GetDIBits все делает правильно, т.е. ошибка в другом месте -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
GremlinProg,
с выравниваем вроде бы все нормально +GetDIBits возвращает не ноль, а где как вы думаете, еще может быть ошибка? |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
думаю, еще до StoreBitmapFile, при формаровании битмапа (если он черный, значит нули и должны быть) попробуй выводить его дополнительно в окне -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
ну я пытаюсь в битмап запихать то что содерожит hdc, а hdc я вывожу на экран и выводится нормально, а битмап попробую вывести. Кстати в первом посту этой темя я прикрепил архив, там всяие геометрические фигуры на экран выводтся -вдргу кому-то надо. Это сообщение отредактировал(а) rrrFer - 11.5.2009, 16:12 |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
спасибо всем, решил проблему.
|
|||
|
||||
![]()
|
| Правила форума "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. |