Advertisement
| 11.10.2008 at 11:40AM PST, ID: 23892110 |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
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: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: |
/****************************************************************************
*
* BMP-related data types based on Microsoft's own.
***************************************************************************/
/*
* Common Data Types
*
* The data types in this section are essentially aliases for C/C++
* primitive data types.
*
* Adapted from http://msdn.microsoft.com/en-us/library/cc230309.aspx.
*/
typedef unsigned char BYTE;
typedef unsigned long DWORD;
typedef long LONG;
typedef unsigned short WORD;
/*
* BITMAPFILEHEADER
*
* The BITMAPFILEHEADER structure contains information about the type, size,
* and layout of a file that contains a DIB [device-independent bitmap].
*
* Adapted from http://msdn2.microsoft.com/en-us/library/ms532321.aspx.
*/
typedef struct
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} __attribute__((__packed__))
BITMAPFILEHEADER;
/*
* BITMAPINFOHEADER
*
* The BITMAPINFOHEADER structure contains information about the
* dimensions and color format of a DIB [device-independent bitmap].
*
* Adapted from http://msdn2.microsoft.com/en-us/library/ms532290.aspx.
*/
typedef struct
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} __attribute__((__packed__))
BITMAPINFOHEADER;
/*
* RGBTRIPLE
*
* This structure describes a color consisting of relative intensities of
* red, green, and blue.
*
* Adapted from http://msdn.microsoft.com/en-us/library/aa922590.aspx.
*/
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
/****************************************************************************
*
* Copies a BMP piece by piece
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "bmp.h"
int
main(int argc, char *argv[])
{
// ensure proper usage
if (argc != 4)
{
printf("Usage: resize number infile outfile\n");
return 1;
}
// remember filenames
int number = atoi(argv[1]);
char *infile = argv[2];
char *outfile = argv[3];
// make sure it's postive number
if (number < 0)
{
printf("Please enter a postive number\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)
{
fprintf(stderr, "Could not create %s.\n", outfile);
return 3;
}
// read infile's BITMAPFILEHEADER
BITMAPFILEHEADER bf;
fread(&bf, sizeof(BITMAPFILEHEADER), 1, inptr);
// read infile's 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)
{
fprintf(stderr, "Unsupported file format.\n");
return 4;
}
// write outfile's BITMAPFILEHEADER
fwrite(&bf, sizeof(BITMAPFILEHEADER), 1, outptr);
printf("before bi.biWidth=%ld\n", bi.biWidth);
bi.biWidth=bi.biWidth * number;
printf("after bi.biWidth=%ld\n", bi.biWidth);
printf("before bi.biHeight=%ld\n", bi.biHeight);
bi.biHeight=bi.biHeight * number;
printf("after bi.biHeight=%ld\n", bi.biHeight);
printf("before bi.biSizeImage=%ld\n", bi.biSizeImage);
bi.biSizeImage=bi.biSizeImage * number * number;
printf("after bi.biSizeImage=%ld\n", bi.biSizeImage);
// write outfile's BITMAPINFOHEADER
fwrite(&bi, sizeof(BITMAPINFOHEADER), 1, outptr);
unsigned char * buffer[1048576]={' '};
// fread(&buffer, sizeof(RGBTRIPLE), 1, inptr);
// determine padding for scanlines
int padding = ((4 - (bi.biWidth * sizeof(RGBTRIPLE)/number) % 4) *
(4 - (bi.biHeight * sizeof(RGBTRIPLE)/number) % 4)) % 4 ;
printf("padding=%d\n", padding);
printf("before bi.biHeight=%ld\n", bi.biHeight);
// bi.biHeight=bi.biHeight * number;
// printf("after bi.biHeight=%ld\n", bi.biHeight);
// iterate over infile's scanlines
for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight/number; i++)
{
RGBTRIPLE triple;
printf("i=%d\n",i);
// printf("j=%d\n",j);
fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
for (int m=0; m < number; m++)
{
fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr);
printf("outside triple.rgbtBlue=%x\n",triple.rgbtBlue);
printf("outside triple.rgbtGreen=%x\n",triple.rgbtGreen);
printf("outside triple.rgbtRed=%x\n",triple.rgbtRed);
}
// iterate over pixels in scanline
for (int j = 0; j < bi.biWidth/number; j++)
{
// printf("i=%d\n",i);
printf("j=%d\n",j);
// temporary storage
// RGBTRIPLE triple;
// read RGB triple from infile
fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
// buffer=triple;
// printf("buffer=%x\n",buffer);
// write RGB triple to outfile
for (int l=0; l < number; l++)
{
fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr);
printf("inside triple.rgbtBlue=%x\n",triple.rgbtBlue);
printf("inside triple.rgbtGreen=%x\n",triple.rgbtGreen);
printf("inside triple.rgbtRed=%x\n",triple.rgbtRed);
}
}
// for (int m=0; m < number; m++)
// {
// fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr);
// printf("outside triple.rgbtBlue=%x\n",triple.rgbtBlue);
// printf("outside triple.rgbtGreen=%x\n",triple.rgbtGreen);
// printf("outside triple.rgbtRed=%x\n",triple.rgbtRed);
// }
// skip over padding, if any
fseek(inptr, padding, SEEK_CUR);
// write padding to outfile
for (int k = 0; k < padding; k++)
fputc(0x00, outptr);
}
// close infile
fclose(inptr);
// close outfile
fclose(outptr);
// that's all folks
return 0;
}
|
Advertisement