Как я должен использовать функцию GetDIBits - PullRequest
0 голосов
/ 19 февраля 2020
var bitmap win.BITMAP
win.GetObject(win.HGDIOBJ(hBitmap), unsafe.Sizeof(bitmap), unsafe.Pointer(&bitmap))
var bmpInfo win.BITMAPINFO
bmpInfo.BmiHeader.BiSize = uint32(unsafe.Sizeof(Info.BmiHeader))
....................Width = width
....................Height = height
....................Planes = 1
....................BitCount = 24
....................Compression = win.BI_RGB
var hdc win.HDC
hdc = win.GetDC(0)
win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), bitmapInfo, nil, 0)
pBits := make([]byte, imageSize)
win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), bitmapInfo, (*byte)(unsafe.Pointer(&pBits)), 0)

use package github.com/lxn/win

Прежде всего, мы проделали всю работу до получения функции GetDIBits.

После этого я наконец пытаюсь получить данные изображения, используя функцию GetDIBits, но она продолжает возвращать 0.

Я изменил тип данных pBits на «unsafe.Pointer» или «* byte 'и пробовал, но вернул ноль или 0.

Как я могу получить данные изображения из функции GetDIBits?

1 Ответ

0 голосов
/ 19 февраля 2020

Я не знаю много о Go языке, но когда вы используете GetDIBits, положение параметров неправильное.

lpvBits

Указатель на буфер для получения растровых данных. Если этот параметр имеет значение NULL, функция передает размеры и формат растрового изображения в структуру BITMAPINFO, на которую указывает параметр lpbi.

lpbmi

Указатель на Структура BITMAPINFO, которая задает желаемый формат для данных DIB.

Вы можете изменить его следующим образом:

win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), nil, bitmapInfo, 0)
pBits := make([]byte, imageSize)

win.GetDIBits(hdc, bitmap, 0, uint32(bitmap.BmHeight), (*byte)(unsafe.Pointer(&pBits)), bitmapInfo, 0)

См .: Использование GetDIBits для загрузки растрового изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...