Ejemplo n.º 1
0
u8 LCD_ImageDimensions(const char *file, u16 *w, u16 *h)
{
    FILE *fh;
    u32 black, white;
    fh = fopen(file, "r");
    if(! fh) {
        return 0;
    }
    int ret = image_read_header(fh, w, h, &black, &white);
    fclose(fh);
    return ret;
}
Ejemplo n.º 2
0
void LCD_DrawWindowedImageFromFile(u16 x, u16 y, const char *file, s16 w, s16 h, u16 x_off, u16 y_off)
{
    FILE *fh;
    u32 black, white;
    u8 buf[48];
    u16 img_w = 0, img_h = 0;

    fh = fopen(file, "rb");
    if(! fh) {
        printf("DEBUG: LCD_DrawWindowedImageFromFile: Image not found: %s\n", file);
        if (w > 0 && h > 0)
            LCD_FillRect(x, y, w, h, 0);
        return;
    }
    if (! image_read_header(fh, &img_w, &img_h, &black, &white)) {
        fclose(fh);
        return;
    }
    //printf("DEBUG: LCD_DrawWindowedImageFromFile: %s %dx%d %06x %06x\n", file, img_w, img_h, black, white);
    if (img_w > sizeof(buf)*8) {
        printf("DEBUG: LCD_DrawWindowedImageFromFile: Image is too wide: %d > %d\n", img_w, sizeof(buf)*8);
        fclose(fh);
        return;
    }
    if (w < 0)
        w = img_w;
    if (h < 0)
        h = img_h;
    LCD_DrawStart(x, y, x + w - 1, y + h -1, DRAW_NWSE);
    unsigned bytes = (img_w + 7) / 8;
    fseek(fh, bytes * y_off, SEEK_CUR);
    for (int i = 0; i < h; i++) {
        int ret = fread(buf, bytes, 1, fh);
        if (ret != 1) {
            //printf("DEBUG: LCD_DrawWindowedImageFromFile: Buffer read issue? (%s, %d, %d)\n", file, ret, i);
            break;
        }
        for (int j = 0; j < w; j++) {
            unsigned val = buf[(j + x_off) / 8] & (1 << (7 - ((j + x_off) % 8)));
            LCD_DrawPixelXY(x+j, y+i, val ? black : white);
        }
    }
    fclose(fh);
    LCD_DrawStop(); 
}
Ejemplo n.º 3
0
FILE *open_image_file (NV_CHAR *path)
{
  FILE                  *fp;
  NV_INT32              i;
  OLD_IMAGE_INDEX_T     old_record;


  NV_INT32 big_endian ();


  swap = (NV_BOOL) big_endian ();


  l_head.text.data_size = 0;


  /*  Brute force!  Load the index into memory, it ain't big anyway.  */

  if ((fp = fopen64 (path, "rb")) == NULL)
    {
      perror (path);
    }
  else
    {
      old = image_read_header (fp, &l_head);

      if (records) free (records);

      records = (IMAGE_INDEX_T *) calloc (l_head.text.number_images, sizeof (IMAGE_INDEX_T));

      if (records == NULL)
        {
          perror ("Allocating image index");
          exit (-1);
        }

      if (old)
        {
          for (i = 0 ; i < l_head.text.number_images ; i++)
            {
              fread (&old_record, sizeof (OLD_IMAGE_INDEX_T), 1, fp);
                
              if (swap)
                {
                  swap_NV_INT64 (&old_record.timestamp);
                  swap_NV_INT64 (&old_record.byte_offset);

                  swap_NV_INT32 (&old_record.image_size);
                  swap_NV_INT32 (&old_record.image_number);
                }
              records[i].timestamp = old_record.timestamp;
              records[i].byte_offset = old_record.byte_offset;
              records[i].image_size = old_record.image_size;
              records[i].image_number = old_record.image_number;

              l_head.text.data_size += records[i].image_size;
            }
        }
      else
        {
          for (i = 0 ; i < l_head.text.number_images ; i++)
            {
              fread (&records[i], sizeof (IMAGE_INDEX_T), 1, fp);

              if (swap)
                {
                  swap_NV_INT64 (&records[i].timestamp);
                  swap_NV_INT64 (&records[i].byte_offset);

                  swap_NV_INT32 (&records[i].image_size);
                  swap_NV_INT32 (&records[i].image_number);
                }

              l_head.text.data_size += records[i].image_size;
            }
        }
    }

  return (fp);
}