Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #include <math.h>
- RGBQUAD *get_pixels(HWND window, int x, int y, int width, int height)
- {
- RECT rc;
- GetWindowRect(window, &rc);
- const DWORD image_size = width * height;
- RGBQUAD *pixels = (RGBQUAD*)malloc(sizeof(RGBQUAD) * image_size);
- HDC hdc = GetDC(window);
- HDC mem_dc = CreateCompatibleDC(hdc);
- HBITMAP bmp = CreateCompatibleBitmap(hdc, width, height);
- SelectObject(mem_dc, bmp);
- BitBlt(mem_dc, 0, 0, width, height, hdc, (rc.left + x), (rc.top + y), SRCCOPY);
- BITMAPINFO bmi = {0};
- bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biWidth = width;
- bmi.bmiHeader.biHeight = height;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biBitCount = 32;
- bmi.bmiHeader.biCompression = BI_RGB;
- GetDIBits(mem_dc, bmp, 0, height, pixels, &bmi, DIB_RGB_COLORS);
- ReleaseDC(window, hdc);
- DeleteDC(mem_dc);
- DeleteObject(bmp);
- return pixels;
- }
- typedef struct _AVR_RGB
- {
- double r, g, b;
- }
- AVR_RGB;
- AVR_RGB get_average_rgb(RGBQUAD pixels[], double image_size)
- {
- double r = 0, g = 0, b = 0;
- for (int i = 0; i < image_size; i++) {
- r += pixels[i].rgbRed * pixels[i].rgbRed;
- g += pixels[i].rgbGreen * pixels[i].rgbGreen;
- b += pixels[i].rgbBlue * pixels[i].rgbBlue;
- }
- AVR_RGB rgb = { sqrt(r / image_size), sqrt(g / image_size), sqrt(b / image_size) };
- return rgb;
- }
- int main(int argc, char const *argv[])
- {
- HWND window = FindWindowA(NULL, "PS4 Remote Play");
- if(window == NULL) {
- printf("Remote Play window not found.\n");
- return 1;
- }
- SetWindowPos(window, HWND_NOTOPMOST, 13, 33, 969, 666, SWP_ASYNCWINDOWPOS);
- Sleep(500);
- int x = atoi(argv[1]), y = atoi(argv[2]), width = atoi(argv[3]), height = atoi(argv[4]);
- RGBQUAD *pixels = get_pixels(window, x, y, width, height);
- printf("First pixel: %i %i %i%\n", pixels[0].rgbRed, pixels[0].rgbGreen, pixels[0].rgbBlue);
- AVR_RGB rgb = get_average_rgb(pixels, width * height);
- printf("Average RGB: %i %i %i%\n", (int)rgb.r, (int)rgb.g, (int)rgb.b);
- if(argc == 6)
- for (size_t i = 0; i < width * height; i++) {
- printf("%x ", pixels[i].rgbBlue);
- if((i + 1) % width == 0)
- puts("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement