|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 24, 2003 13:12:20 Подскажите как правильно обращаться с GetDIBits. Делаю так: invoke CreateBitmap, 1024, 1024, 1, 24, NULL mov hBitmap, EAX invoke CreateCompatibleDC, NULL mov dc, EAX mov bi.bmiHeader.biSize, sizeof(BITMAPINFOHEADER) invoke GetDIBits, dc, hBitmap, 0, 1024, 0, addr bi, DIB_RGB_COLORS .if EAX == 0 return -1 .endif и получаю ошибку. А если создаю 16-битный битмап, invoke CreateBitmap, 1024, 1024, 1, 16, NULL то проходит нормально. В чем загвоздка? Как сделать, чтобы работала в обоих случаях? |
|
|
Дата: Ноя 24, 2003 13:45:26 Zoda bitmap нужно выбрать в контексте устройства. Чтобы заполнить структуру высота тоже должна быть нулевой. Потом уже можно получать сами данные, передав заполненную структуру, и указатель на массив пикселей. |
|
|
Дата: Ноя 24, 2003 15:03:51 Zoda Посмотри исходник PaintView, процедуру BitmapToFile. Там при первом вызове получаем размер растра, а при втором битовы массив. |
|
|
Дата: Ноя 24, 2003 18:53:03 Можно посмотреть на код здесь: http://www.codexxi.com/MyBlocks.html |
|
|
Дата: Ноя 25, 2003 12:03:06 · Поправил: Zoda bitmap нужно выбрать в контексте устройства. Имеется в виду SelectObject? Если так, то не помогает. Чтобы заполнить структуру высота тоже должна быть нулевой. По-моему, чтобы заполнить структуру, должен быть NULL вместо указателя на массив Посмотри исходник PaintView, процедуру BitmapToFile А в чем особенность? Инициализация структуры не помогает. Может быть не нужно проверять результат функции на НОЛЬ? |
|
|
Дата: Ноя 25, 2003 12:16:54 Zoda Возможно что битмап не совместим с контекстом устройства. Попробуй сделать так: invoke CreateBitmap, 1024, 1024, 1, 32, NULL |
|
|
Дата: Ноя 25, 2003 12:32:29 · Поправил: Zoda Black_mirror Возможно что битмап не совместим с контекстом устройства Похоже что так. Из-за чего это и как от этого избавиться? invoke CreateBitmap, 1024, 1024, 1, 32, NULL Выдает ошибку. (Если в настройках "Свойства экрана" поставить глубину цвета 32 бита, то ошибка не возникает... что за....) |
|
|
Дата: Ноя 25, 2003 13:05:11 Zoda CreateCompatibleBitmap? |
|
|
Дата: Ноя 25, 2003 13:10:21 Zoda Избавится от этого нельзя. А что вообще должна делать программа? |
|
|
Дата: Ноя 25, 2003 13:12:39 q_q CreateCompatibleBitmap не такая простая штука. Если его вызвать для контекста созданого функцией CreateCompatibleDC, то bitmap почему-то получается двухцветным. |
|
|
Дата: Ноя 25, 2003 13:19:39 Black_mirror А что вообще должна делать программа? Хочу из битмапа текстуру сделать (dx8). Видимо нужно искать другие пути. |
|
|
Дата: Ноя 25, 2003 13:49:49 Zoda Мне функция CreateBitmap, вообще не нравиться, она создаёт апаратно - зависимый DDB растр (не рыба ни мясо), может лучше создать диб секцию. |
|
|
Дата: Ноя 25, 2003 13:59:29 Я CreateDIBSection юзаю, когда нужно обработать что-то в dc как массив COLORREF. |
|
|
Дата: Ноя 25, 2003 16:14:29 masquer В этом то и прелесть CreateDIBSection, обеспечивает прямой доступ к массиву пикселов, поддерживает все типы сжатия, даже RLE, но прямая запись реальна только для, 32,24,16, битных изображений т.к. сжатие пока найдёшь нужный пиксел замучаешься. Может GetDIBits, не работает, т.к. растр ты не выбрал в контекст устройства Black_mirror прав,Zoda ты при вызове GetDIBits, указываешь контекст, а растра та там нету, это явная ошибка, блин как я раньше не зметил, наверно старею. Также возможно растр надо инициализировать (заполнить цветом), какие пиксельные данные растра ты хочешь выбирать, если ничего ещё не нарисовал. Кроме того ты должен заполнить структуру BITMAPINFOHEADER, обязательно указав формат растра, т.е. в каком виде, с каким сжатием извлечь пиксельные данные, лучше с помощью GetDIBits узнать сначала размер растра, а потом выбрать данные. |
|
|
Дата: Ноя 25, 2003 18:40:12 А разве мой код (www.codexxi.com -> Components) не работает? Там снимается HDC в HBITMAP. А потом используя GetDIBits() и пишется BMP файл на диск. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.168 |