Мой вопрос относится к задаче, которую я изначально считал простым. Теперь я обнаружил, что есть много деталей
, которые не были сначала рассмотрены. Моя первоначальная цель состояла в том, чтобы нарисовать изображение флага в диалоговом окне. Для простоты я начал просто отображать его в главном окне. Я начал с поиска изображения, изменения его размера и сохраняя его с предполагаемой глубиной цвета. Файл Bitmap / .bmp казался простым, это то, что я намеревался использовать. В моем случае был выбран четыре битного/шестнадцать цвет для уменьшения размера файла. Фактический размер в файле имеет ширину 600 и высотой 300. Это дает файл с данными 90 тыс. Пикселей, плюс заголовок, который в моем случае составляет 118 байт. Сначала я загружаю изображение, используя следующую последовательность ... Я удалил проверку ошибки для ясности: < /p>
hFlag = LoadImage(GetModuleHandle(NULL), wcImageFile,
IMAGE_BITMAP, 600, 300, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
GetObject(hFlag, sizeof(BITMAP), &bitmap);
< /code>
Содержание растрового изображения - это не то, что я ожидаю после запуска этой короткой последовательности. Результат для
bmtype, bmwidth, bmheight, bmwidthbytes, bmplanes, как я и ожидал. Однако Bmbitspixel
- 0x20 или 32. Bmbits - нулевой указатель. GetObject возвращает
int 0x18, который составляет размер растровой структуры, которую он заполняет. Все, как и ожидалось. Тем не менее, биты на пиксель, которые, как я ожидаю, будет 4 возврата в 32. В случае 32 битов/пикселей размер массива данных пикселей будет коротким в восемь раз. Это, вероятно, будет обнаружено, и сгенерировал нулевой указатель.SelectObject(hdcMem, hFlag);
BitBlt(hdc, 0, 0, 600, 300, hdcMem, 0, 0, SRCCOPY);
< /code>
затем отображается флаг. Я надеюсь, что кто -то может помочь мне понять это. Я работаю через Petzold, однако это большая книга.case WM_CREATE:
{
const wchar_t *wImageFile;
wImageFile = L"C:\\Users\\Tom\\Pictures\\Flag\\Flag.bmp";
DWORD dwError = 0;
hFlag = (HBITMAP) LoadImage(GetModuleHandle(NULL), wImageFile, IMAGE_BITMAP, 600, 300, LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if(hFlag == 0)
dwError = GetLastError();
int nWhatsit = GetObject(hFlag, sizeof(BITMAP), &bitmap);
return (INT_PTR)FALSE;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... parameters
Отображение изображения растрового изображения, getObject, кажется, неправильно размер некоторых параметров в структуре ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение