Я пытаюсь создать функцию, эквивалентную функции GetPixel() Windows API, но я хочу создать растровое изображение своего экрана, а затем прочитать этот буфер.C++ чтение пикселей с помощью GetDIBits()
Это то, что у меня есть (чаще всего скопировано из поиска Google), когда я его запускаю, он выводит только 0. Я думаю, что у меня есть большая часть этого права, и что моя проблема в том, что я не знаю, как читать переменную BYTE.
Так что мой вопрос: что мне нужно сделать, чтобы заставить его распечатать некоторые случайные цвета (R, G или B) с помощью цикла for?
#include <Windows.h>
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main() {
HDC hdc,hdcMem;
hdc = GetDC(NULL);
hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, 1680, 1050);
BITMAPINFO MyBMInfo = {0};
MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader);
// Get the BITMAPINFO structure from the bitmap
if(0 == GetDIBits(hdcMem, hBitmap, 0, 0, NULL, &MyBMInfo, DIB_RGB_COLORS)) {
cout << "error" << endl;
}
// create the bitmap buffer
BYTE* lpPixels = new BYTE[MyBMInfo.bmiHeader.biSizeImage];
MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader);
MyBMInfo.bmiHeader.biBitCount = 32;
MyBMInfo.bmiHeader.biCompression = BI_RGB;
MyBMInfo.bmiHeader.biHeight = abs(MyBMInfo.bmiHeader.biHeight);
// get the actual bitmap buffer
if(0 == GetDIBits(hdc, hBitmap, 0, MyBMInfo.bmiHeader.biHeight, (LPVOID)lpPixels, &MyBMInfo, DIB_RGB_COLORS)) {
cout << "error2" << endl;
}
for(int i = 0; i < 100; i++) {
cout << (int)lpPixels[i] << endl;
}
return 0;
}
- Windows 7
- C :: B 13,12 (Application Console)
- Компилятор: mingw32-НКУ
- Библиотека gdi32 связана
возможно дубликат [GetDIBits и проходным пикселей с использованием X, Y] (http://stackoverflow.com/questions/3688409/getdibits-and-loop-through-pixels-using-xy) – sashoalm