#define MAXIMGIDENT 100
+typedef uint32_t Rgb; /* red<<0 | green<<8 | blue<<16 */
+
typedef struct RgbImage {
int w, h;
- unsigned char data[];
- /* red = data[ y*w*3 + x*3 + 0 ] = RI_PIXEL(ri,x,y)[0]
- * green = data[ y*w*3 + x*3 + 1 ] = RI_PIXEL(ri,x,y)[1]
- * blue = data[ y*w*3 + x*3 + 2 ] = RI_PIXEL(ri,x,y)[2]
- */
+ Rgb data[]; /* data[ y*w + x ] */
} RgbImage;
-typedef unsigned long Rgb;
-
void identify_rgbimage(const RgbImage *base, Rect portion,
char result[MAXIMGIDENT], const char *what);
RgbImage *alloc_rgb_image(int w, int h);
void fwrite_ppmraw(FILE *f, const RgbImage *ri);
-#define RI_PIXEL(ri,x,y) ((ri)->data + ((y)*(ri)->w + (x)) * 3)
+#define RI_PIXEL32(ri,x,y) ((ri)->data + ((y)*(ri)->w + (x)))
static inline Rgb ri_rgb(const RgbImage *ri, int x, int y) {
- const unsigned char *rip= RI_PIXEL(ri,x,y);
- return (rip[0] << 16) |
- (rip[1] << 8) |
- (rip[2] );
+ return *RI_PIXEL32(ri,x,y);
}
/*----- from structure.c -----*/