+
+static void rleEncode(unsigned char *pixels, unsigned int w, unsigned int h) {
+ int scanline;
+ int i;
+ int penActive = 0;
+ int counter = 0;
+
+ for (scanline = 0; scanline < h; scanline++) {
+ for (i = 0; i < w; i++) {
+ if (*pixels++) {
+ if (penActive) {
+ if (counter >= PIXEL_PADDING) {
+ printf("W %d ", counter);
+ counter = 0;
+ printf("I %d ", counter);
+ }
+ counter++;
+ } else {
+ counter++;
+ printf("I %d ", counter);
+ counter = 1;
+ penActive = 1;
+ }
+ } else {
+ if (penActive) {
+ printf("W %d ", counter);
+ counter = 0;
+ penActive = 0;
+ } else {
+ counter++;
+ }
+ }
+ }
+
+ if (penActive) {
+ printf("W %d ", counter);
+ }
+ penActive = 0;
+ counter = 0;
+ printf(" CR\n");
+ }
+}