parent
f330f1356f
commit
9edf507423
@ -0,0 +1,100 @@ |
|||||||
|
#include <X11/Xlib.h> |
||||||
|
#include <X11/X.h> |
||||||
|
#include <X11/Xutil.h> |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <stdint.h> |
||||||
|
#include <unistd.h> |
||||||
|
|
||||||
|
typedef struct RGB_struct { |
||||||
|
uint8_t b; |
||||||
|
uint8_t g; |
||||||
|
uint8_t r; |
||||||
|
} RGB; |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
Display *display = XOpenDisplay(NULL); |
||||||
|
Window root = DefaultRootWindow(display); |
||||||
|
|
||||||
|
XWindowAttributes gwa; |
||||||
|
|
||||||
|
XGetWindowAttributes(display, root, &gwa); |
||||||
|
uint32_t width = gwa.width; |
||||||
|
uint32_t height = gwa.height; |
||||||
|
|
||||||
|
// The first image, to measure the screen
|
||||||
|
XImage *image = XGetImage(display, root, 0, 0, width, height, AllPlanes, ZPixmap);
|
||||||
|
uint8_t array[width * height * 3]; |
||||||
|
const uint32_t red_mask = image->red_mask; |
||||||
|
const uint32_t green_mask = image->green_mask; |
||||||
|
const uint32_t blue_mask = image->blue_mask; |
||||||
|
|
||||||
|
printf("mask: %p %p %p\nbyte_order: %d\nunit: %d\nbit_order: %d\npad: %d\ndepth: %d\nBPL: %d\nbPPx: %d\n",
|
||||||
|
red_mask, green_mask, blue_mask, image->byte_order, image->bitmap_unit,
|
||||||
|
image->bitmap_bit_order, image->bitmap_pad, image->depth, image->bytes_per_line, image->bits_per_pixel); |
||||||
|
|
||||||
|
union Color { |
||||||
|
uint32_t hex; |
||||||
|
RGB rgb; |
||||||
|
|
||||||
|
struct { |
||||||
|
uint8_t b; |
||||||
|
uint8_t g; |
||||||
|
uint8_t r; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
const uint32_t xnum = 32; |
||||||
|
const uint32_t ynum = 24; |
||||||
|
const uint32_t xstep = width/xnum; |
||||||
|
const uint32_t ystep = height/ynum; |
||||||
|
|
||||||
|
union Color *C; |
||||||
|
while (XGetSubImage(display, root, 0, 0, width, height, AllPlanes, ZPixmap, image, 0, 0)) { |
||||||
|
//color.hex = XGetPixel(image, 40,40);
|
||||||
|
|
||||||
|
printf("\033[2J\033[H"); |
||||||
|
for (int i = 0; i < ynum; i++) { |
||||||
|
printf("\n"); |
||||||
|
for (int j = 0; j < xnum; j++) { |
||||||
|
C = ((union Color*)image->data + i*ystep*width + j*xstep); |
||||||
|
printf("\x1b[48;2;%d;%d;%dm \x1b[m", C->r, C->g, C->b); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
usleep(50000); |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
#if 0 |
||||||
|
typedef struct _XImage { |
||||||
|
int width, height; /* size of image */ |
||||||
|
int xoffset; /* number of pixels offset in X direction */ |
||||||
|
int format; /* XYBitmap, XYPixmap, ZPixmap */ |
||||||
|
char *data; /* pointer to image data */ |
||||||
|
int byte_order; /* data byte order, LSBFirst, MSBFirst */ |
||||||
|
int bitmap_unit; /* quant. of scanline 8, 16, 32 */ |
||||||
|
int bitmap_bit_order; /* LSBFirst, MSBFirst */ |
||||||
|
int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ |
||||||
|
int depth; /* depth of image */ |
||||||
|
int bytes_per_line; /* accelerator to next scanline */ |
||||||
|
int bits_per_pixel; /* bits per pixel (ZPixmap) */ |
||||||
|
unsigned long red_mask; /* bits in z arrangement */ |
||||||
|
unsigned long green_mask; |
||||||
|
unsigned long blue_mask; |
||||||
|
XPointer obdata; /* hook for the object routines to hang on */ |
||||||
|
struct funcs { /* image manipulation routines */ |
||||||
|
struct _XImage *(*create_image)(); |
||||||
|
int (*destroy_image)(); |
||||||
|
unsigned long (*get_pixel)(); |
||||||
|
int (*put_pixel)(); |
||||||
|
struct _XImage *(*sub_image)(); |
||||||
|
int (*add_pixel)(); |
||||||
|
} f; |
||||||
|
} XImage; |
||||||
|
#endif |
||||||
|
|
Loading…
Reference in new issue