Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <math.h>
  4.  
  5. RGBQUAD *get_pixels(HWND window, int x, int y, int width, int height)
  6. {
  7. RECT rc;
  8. GetWindowRect(window, &rc);
  9. const DWORD image_size = width * height;
  10. RGBQUAD *pixels = (RGBQUAD*)malloc(sizeof(RGBQUAD) * image_size);
  11.  
  12. HDC hdc = GetDC(window);
  13. HDC mem_dc = CreateCompatibleDC(hdc);
  14. HBITMAP bmp = CreateCompatibleBitmap(hdc, width, height);
  15. SelectObject(mem_dc, bmp);
  16.  
  17. BitBlt(mem_dc, 0, 0, width, height, hdc, (rc.left + x), (rc.top + y), SRCCOPY);
  18.  
  19. BITMAPINFO bmi = {0};
  20. bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  21. bmi.bmiHeader.biWidth = width;
  22. bmi.bmiHeader.biHeight = height;
  23. bmi.bmiHeader.biPlanes = 1;
  24. bmi.bmiHeader.biBitCount = 32;
  25. bmi.bmiHeader.biCompression = BI_RGB;
  26.  
  27. GetDIBits(mem_dc, bmp, 0, height, pixels, &bmi, DIB_RGB_COLORS);
  28.  
  29.  
  30. ReleaseDC(window, hdc);
  31. DeleteDC(mem_dc);
  32. DeleteObject(bmp);
  33.  
  34. return pixels;
  35. }
  36.  
  37. typedef struct _AVR_RGB
  38. {
  39. double r, g, b;
  40. }
  41. AVR_RGB;
  42.  
  43. AVR_RGB get_average_rgb(RGBQUAD pixels[], double image_size)
  44. {
  45. double r = 0, g = 0, b = 0;
  46.  
  47. for (int i = 0; i < image_size; i++) {
  48. r += pixels[i].rgbRed * pixels[i].rgbRed;
  49. g += pixels[i].rgbGreen * pixels[i].rgbGreen;
  50. b += pixels[i].rgbBlue * pixels[i].rgbBlue;
  51. }
  52.  
  53. AVR_RGB rgb = { sqrt(r / image_size), sqrt(g / image_size), sqrt(b / image_size) };
  54.  
  55. return rgb;
  56. }
  57.  
  58. int main(int argc, char const *argv[])
  59. {
  60. HWND window = FindWindowA(NULL, "PS4 Remote Play");
  61. if(window == NULL) {
  62. printf("Remote Play window not found.\n");
  63. return 1;
  64. }
  65.  
  66. SetWindowPos(window, HWND_NOTOPMOST, 13, 33, 969, 666, SWP_ASYNCWINDOWPOS);
  67. Sleep(500);
  68.  
  69. int x = atoi(argv[1]), y = atoi(argv[2]), width = atoi(argv[3]), height = atoi(argv[4]);
  70.  
  71. RGBQUAD *pixels = get_pixels(window, x, y, width, height);
  72.  
  73. printf("First pixel: %i %i %i%\n", pixels[0].rgbRed, pixels[0].rgbGreen, pixels[0].rgbBlue);
  74.  
  75. AVR_RGB rgb = get_average_rgb(pixels, width * height);
  76.  
  77. printf("Average RGB: %i %i %i%\n", (int)rgb.r, (int)rgb.g, (int)rgb.b);
  78.  
  79. if(argc == 6)
  80. for (size_t i = 0; i < width * height; i++) {
  81. printf("%x ", pixels[i].rgbBlue);
  82. if((i + 1) % width == 0)
  83. puts("");
  84. }
  85.  
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement