viewing paste Unknown #406 | C++

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
void CSPR::Set1ImageCompressed(BYTE *dat, int no)
{
  WORD width, height;
 
  width = *(WORD *)dat;
  dat += 2;
  height = *(WORD *)dat;
  dat += 2;
  (imgs+no)->w = width;
  (imgs+no)->h = height;
 
  try {
    (imgs+no)->dat = (DWORD *)malloc(sizeof(DWORD)*width*height);
    (imgs+no)->paldat = (BYTE *)malloc(sizeof(BYTE)*width*height);
  } catch (...) {
    return;
  }
 
  dat += 2; // compressed length
 
  bool zero = false;
  int restzero = 0;
  int p;
  for (int y=0; y<height; y++) {
    for (int x=0; x<width; x++) {
      p = y*width+x;
      if (zero) {
        *((imgs+no)->dat + p) = 0;
        *((imgs+no)->paldat +p) = 0;
        restzero--;
        if (restzero == 0) {
          zero = false;
        }
      } else {
        if (*dat == 0) {
          dat++;
          zero = true;
          restzero = *dat;
          dat++;
          *((imgs+no)->dat + p) = 00;
          *((imgs+no)->paldat + p) = 0;
          restzero--;
          if (!restzero) zero = false;
        } else {
          *((imgs+no)->dat + p) = *(pal + *dat) | 0xFF000000;
          *((imgs+no)->paldat + p) = *dat;
          dat++;
        }
      }
    }
  }
}
Viewed 763 times, submitted by Guest.