0 / 0 / 0
Регистрация: 25.07.2022
Сообщений: 19
1

При конвертации HBITMAP в BYTE* изображение переворачивается

02.12.2023, 19:18. Показов 1527. Ответов 0

Author24 — интернет-сервис помощи студентам
Конвертирую HBITMAP в BYTE* и наоборот, после чего вывожу изображение на экран, тут оно и выходит перевёрнутым. Точнее не тут, а где-то в конвертации (подозреваю, что этому вина GetBitmapBits). Главный вопрос: как перевернуть изображение при отрисовке (отрицательная высота в StretchBlt не помогает, не рисует изображение)? Вторичный вопрос: почему оно вообще переворачивается?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//конвертация hbitmap в byte*
HBITMAP hImage = makeScreenshot(); //Делаю скриншот основного экрана
BITMAP image; 
GetObject(hImage, sizeof(image), &image); //Конвертирую hbitmap в bitmap (для размера hbitmap)
int totalBytes = image.bmWidthBytes * image.bmHeight; //считаю размер hbitmap в байтах
BYTE* bytes = new BYTE[totalBytes];
GetBitmapBits(hImage, totalBytes, bytes);
 
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = width;
bmpInfo.bmiHeader.biHeight = height;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 32;
bmpInfo.bmiHeader.biCompression = BI_RGB;
 
HDC dc = GetDC(NULL);
HBITMAP hBitmap = CreateDIBitmap(dc, &bmpInfo.bmiHeader, CBM_INIT, bytes, &bmpInfo, DIB_RGB_COLORS); //делаю hbitmap из byte*
ReleaseDC(NULL, dc);
 
HDC consoleDC = GetDC(GetConsoleWindow()); //будем его на консоли рисовать
HDC dcmem = CreateCompatibleDC(consoleDC);
SelectObject(dcmem, hBitmap);
 
RECT r;
GetClientRect(GetConsoleWindow(), &r);
StretchBlt(consoleDC, 0, 0, r.right - r.left, r.bottom - r.top, dcmem, 0, 0, width, height, SRCCOPY); //тут нужно перевернуть (r.bottom + r.top не помогает, повторюсь)
DeleteDC(dcmem);
ReleaseDC(GetConsoleWindow(), consoleDC);
delete[] bytes;
Я решил. Минус не там ставил.
C++
1
bmpInfo.bmiHeader.biHeight = -height; //отрицательная высота
StretchBlt вообще не нужно трогать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2023, 19:18
Ответы с готовыми решениями:

Артефакты при преобразовании HBITMAP в BYTE* и назад
Делаю скриншот экрана при помощи makeScreenshot(). Программа должна конвертировать этот скриншот...

Проблема при загрузке изображения в Bitmap и BitmapImage (изображение переворачивается)
Проблема в том, что при загрузке изображения в Bitmap, либо BitmapImage изображение...

Варианты конвертации bool/byte/int в byte/int
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А...

Изображение 8 bit per pixel (в виде массива байт) в HBITMAP
Здравствуйте. Необходимо получить из изображения в градациях серого (каждый пиксель кодируется...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2023, 19:18
Помогаю со студенческими работами здесь

Рисование битмапов: (HBITMAP)SelectObject(hMemDC, hBitmap) выдаёт ошибку
Использовал пример из книг Фроловых "Библиотека системного программиста" рисование битовых...

Переворачивается ToolTip при дабл вызове
Собственно сабж... ТулТип вызываю по событию. Мог извратится и отключить 'IsBalloon'...

задать изображение из byte[]
здравствуйте. подскажите, пожалуйста, как можно вывести изображение на страницу asp.net, которое...

Нельзя преобразовать тип function(a: byte;b: byte): byte к integer (Списки)
Создать список из целых чисел.Поменять в списке местами максимальный и минимальный элементы...

Как получить изображение из массива Byte
Здравствуйте!

Массив byte[] в изображение формата PNG
Есть задача: С POS идет чек, который держу в массиве byte со спецсимволами и настройками термо...

Глупый человек ищет умную мысль при сравнения массива типа byte с маскй типа byte.
Прошу помощи в виде объяснения в следующем вопросе. на вход программы поступает array of byte....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru