24-Bit BMP Raster Data Tutorial & Grayscaling(二)

2014-11-24 10:57:02 · 作者: · 浏览: 8
);
originalImage.rows = (int)getImageInfo(bmpInput, 22, 4);
fileSize = getImageInfo(bmpInput, 2, 4);
nColors = getImageInfo(bmpInput, 46, 4);

/*----PRINT BMP INFO TO SCREEN-----*/
printf("Width: %d\n", originalImage.cols);
printf("Height: %d\n", originalImage.rows);
printf("File size: %ld\n", fileSize);
printf("Bits/pixel: %d\n", getImageInfo(bmpInput, 28, 4));
printf("No. colors: %d\n", nColors);


/*----FOR 24-BIT BMP, THERE IS NO COLOR TABLE-----*/
fseek(bmpInput, 54, SEEK_SET);

/*-----------READ RASTER DATA-----------*/
for(r=0; r<=originalImage.rows-1; r++)
{
for(c=0; c<=originalImage.cols-1; c++)
{

/*----READ FIRST BYTE TO GET BLUE VALUE-----*/
fread(pChar, sizeof(char), 1, bmpInput);
blueva lue = *pChar;

/*-----READ NEXT BYTE TO GET GREEN VALUE-----*/
fread(pChar, sizeof(char), 1, bmpInput);
greenValue = *pChar;

/*-----READ NEXT BYTE TO GET RED VALUE-----*/
fread(pChar, sizeof(char), 1, bmpInput);
redValue = *pChar;

/*---------PRINT TO TEXT FILE---------*/
fprintf(rasterOutput, "(%d %d) = \tRed \t%d", r, c, redValue);
fprintf(rasterOutput, "\tGreen \t%d \tBlue \t%d\n", greenValue, blueva lue);

}
}

fclose(bmpInput);
fclose(rasterOutput);

return 0;
}

/*--------SUBPROGRAMS------------*/

long getImageInfo(FILE* inputFile, long offset, int numberOfChars)
{
unsigned char *ptrC;
long value=0L;
int i;
unsigned char dummy;


dummy = '0';
ptrC = &dummy;

fseek(inputFile, offset, SEEK_SET);

for(i=1; i<=numberOfChars; i++)
{
fread(ptrC, sizeof(char), 1, inputFile);
/* calculate value based on adding bytes */
value = (long)(value + (*ptrC)*(pow(256, (i-1))));
}

return(value);
}

Running your raster data program, you will get an ASCII file called data24.txt with some entries looking like the following:


(0 0) = Red 255 Green 255 Blue 255
(0 1) = Red 255 Green 255 Blue 255
(0 2) = Red 255 Green 255 Blue 255
(0 3) = Red 255 Green 255 Blue 255
(0 4) = Red 255 Green 255 Blue 255
(0 5) = Red 255 Green 255 Blue 255
(0 6) = Red 255 Green 255 Blue 255
(0 7) = Red 255 Green 255 Blue 255
(0 8) = Red 255 Green 255 Blue 255
(0 9) = Red 255 Green 255 Blue 255
(0 10) = Red 255 Green 255 Blue 255
(0 11) = Red 255 Green 255 Blue 255
(0 12) = Red 0 Green 0 Blue 0
(0 13) = Red 0 Green 0 Blue 0
(0 14) = Red 0 Green 0 Blue 0
(0 15) = Red 0 Green 0 Blue 0
(0 16) = Red 0 Green 0 Blue 0
(0 17) = Red 0 Green 0 Blue 0
(0 18) = Red 0 Green 0 Blue 0
(0 19) = Red 0 Green 0 Blue 0

:

(8 0) = Red 255 Green 255 Blue 0
(8 1) = Red 255 Green 255 Blue 0
(8 2) = Red 255 Green 255 Blue 0
(8 3) = Red 255 Green 255 Blue 0
(8 4) = Red 255 Green 255 Blue 0
(8 5) = Red 255 Green 255 Blue 0
(8 6) = Red 255 Green 255 Blue 0
(8 7) = Red 255 Green 255 Blue 0
(8 8) = Red 255 Green 255 Blue 0
(8 9) = Red 255 Green 255 Blue 0
(8 10) = Red 255 Green 255 Blue 0
(8 11) = Red 255 Green 255 Blue 0
(8 12) = Red 255 Green 255 Blue 255
(8 13) = Red 255 Green 255 Blue 255
(8 14) = Red 255 Green 255 Blue 255
(8 15) = Red 255 Green 255 Blue 255
(8 16) = Red 255 Green 255 Blue 255
(8 17) = Red 255 Green 255 Blue 255
(8 18) = Red 255 Green 255 Blue 255
(8 19) = Red 255 Green 255 Blue 255

:

(16 0) = Red 255 Green 255 Blue 0
(16 1) = Red 255 Green 255 Blue 0
(16 2) = Red 255 Green 255 Blue 0
(16 3) = Red 255 Green 255 Blue 0
(16 4) = Red 255 Green 255 Blue 0
(16 5) = Red 255 Green 255