Hey guys, I need once again your help, this time with resize in - TopicsExpress



          

Hey guys, I need once again your help, this time with resize in pest5. My problem is that i always get the error Unsupported file format. I think it has to do with the headers, but i cannot find the bug. Thank you for helping me! /** * copy.c * * Computer Science 50 * Problem Set 5 * * Copies a BMP piece by piece, just because. */ #include #include #include bmp.h int main(int argc, char* argv[]) { // ensure proper usage if (argc != 4) { printf(Usage: ./copy infile outfile\n); return 1; } // remember filenames char* infile = argv[2]; char* outfile = argv[2]; int n = atoi(argv[1]); //check for proper usage while(n < 1 && n > 100) { printf(Give a range from 1 to 100!\n); return 1; } // open input file FILE* inptr = fopen(infile, r); if (inptr == NULL) { printf(Could not open %s.\n, infile); return 2; } // open output file FILE* outptr = fopen(outfile, w); if (outptr == NULL) { fclose(inptr); fprintf(stderr, Could not create %s.\n, outfile); return 3; } // read infiles BITMAPFILEHEADER BITMAPFILEHEADER bf; fread(&bf, sizeof(BITMAPFILEHEADER), 1, inptr); // read infiles BITMAPINFOHEADER BITMAPINFOHEADER bi; fread(&bi, sizeof(BITMAPINFOHEADER), 1, inptr); // ensure infile is (likely) a 24-bit uncompressed BMP 4.0 if (bf.bfType != 0x4d42 || bf.bfOffBits != 54 || bi.biSize != 40 || bi.biBitCount != 24 || bi.biCompression != 0) { fclose(outptr); fclose(inptr); fprintf(stderr, Unsupported file format.\n); return 4; } // New BITMAPFILEHEADER & BITMAPINFOHEADER BITMAPFILEHEADER bf_new; BITMAPINFOHEADER bi_new; bf_new = bf; bi_new = bi; // New Dimensions bi_new.biWidth = n*bi.biWidth; bi_new.biHeight = n*bi.biHeight; //calculate padding int padding = (4 - (bi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4; int padding_new = (4 - (bi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4; // Sizes bi_new.biSizeImage = ((bi_new.biWidth * sizeof(RGBTRIPLE) + padding_new)* abs(bi_new.biHeight)); bf_new.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (bi.biSizeImage * n); // write outfiles BITMAPFILEHEADER fwrite(&bf, sizeof(BITMAPFILEHEADER), 1, outptr); // write outfiles BITMAPINFOHEADER fwrite(&bi, sizeof(BITMAPINFOHEADER), 1, outptr); // iterate over infiles scanlines for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight; i++) { //executing each line n times for (int a = 0; a < n; a++) { // iterate over pixels in scanline for (int j = 0; j < bi.biWidth; j++) { // temporary storage RGBTRIPLE triple; // read RGB triple from infile fread(&triple, sizeof(RGBTRIPLE), 1, inptr); // write RGB triple to outfile multiplied by n for(int i = 0; i < n; n++) fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr); } } // skip over padding, if any fseek(inptr, padding, SEEK_CUR); // then add it back (to demonstrate how) for (int k = 0; k < padding; k++) { fputc(0x00, outptr); } } // close infile fclose(inptr); // close outfile fclose(outptr); // thats all folks return 0; }
Posted on: Sat, 13 Sep 2014 10:21:37 +0000

Trending Topics



Recently Viewed Topics




© 2015