Мой вопрос относится к задаче, которую я изначально считал простым. Теперь я обнаружил, что есть много деталей
, которые не были сначала рассмотрены. Моя первоначальная цель состояла в том, чтобы нарисовать изображение флага в диалоговом окне. Для простоты я начал просто отображать его в главном окне. Я начал с поиска изображения, изменения его размера и сохраняя его с предполагаемой глубиной цвета. Файл 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++
Программы на C++. Форум разработчиков
1739166229
Anonymous
Мой вопрос относится к задаче, которую я изначально считал простым. Теперь я обнаружил, что есть много деталей
, которые не были сначала рассмотрены. Моя первоначальная цель состояла в том, чтобы нарисовать изображение флага в диалоговом окне. Для простоты я начал просто отображать его в главном окне. Я начал с поиска изображения, изменения его размера и сохраняя его с предполагаемой глубиной цвета. Файл 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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79423461/display-of-a-bitmap-image-getobject-appears-to-incorrectly-size-some-parameters[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия