int R2Image:: Read(const char *filename) { // Initialize everything if (pixels) { delete [] pixels; pixels = NULL; } width = height = 0; // Parse input filename extension const char *input_extension; if (!(input_extension = strrchr(filename, '.'))) { fprintf(stderr, "Input file has no extension (e.g., .jpg).\n"); return 0; } // Read file of appropriate type if (!strncmp(input_extension, ".bmp", 4)) return ReadBMP(filename); else if (!strncmp(input_extension, ".ppm", 4)) return ReadPPM(filename); else if (!strncmp(input_extension, ".pfm", 4)) return ReadPFM(filename); else if (!strncmp(input_extension, ".jpg", 4)) return ReadJPEG(filename); else if (!strncmp(input_extension, ".jpeg", 5)) return ReadJPEG(filename); else if (!strncmp(input_extension, ".tif", 4)) return ReadTIFF(filename); else if (!strncmp(input_extension, ".tiff", 5)) return ReadTIFF(filename); else if (!strncmp(input_extension, ".raw", 4)) return ReadRAW(filename); else if (!strncmp(input_extension, ".grd", 4)) return ReadGRD(filename); // Should never get here fprintf(stderr, "Unrecognized image file extension"); return 0; }
static int ReadPicture(const char* const filename, WebPPicture* const pic, int keep_alpha, Metadata* const metadata) { int ok = 0; FILE* in_file = fopen(filename, "rb"); if (in_file == NULL) { fprintf(stderr, "Error! Cannot open input file '%s'\n", filename); return ok; } if (pic->width == 0 || pic->height == 0) { // If no size specified, try to decode it as PNG/JPEG (as appropriate). const InputFileFormat format = GetImageType(in_file); if (format == PNG_) { ok = ReadPNG(in_file, pic, keep_alpha, metadata); } else if (format == JPEG_) { ok = ReadJPEG(in_file, pic, metadata); } else if (format == TIFF_) { ok = ReadTIFF(filename, pic, keep_alpha, metadata); } else if (format == WEBP_) { ok = ReadWebP(filename, pic, keep_alpha, metadata); } } else { // If image size is specified, infer it as YUV format. ok = ReadYUV(in_file, pic); } if (!ok) { fprintf(stderr, "Error! Could not process file %s\n", filename); } fclose(in_file); return ok; }