int main(void) {
setvbuf( stdout, NULL, _IONBF, 0 );
//Input File
FILE* infile;
infile = fopen("test.bmp", "rb");
//Vars for image
char bm[2];
int imageSize;
int fileSize;
int width, height;
char restOfDataOne[12];
char restOfDataTwo[28];
//Read Header Info
fread(bm, 1, 2, infile);
fread(&fileSize, 1, 4, infile);
imageSize = fileSize - 54;
fread(restOfDataOne, 1, 12, infile);
fread(&width, sizeof(int), 1, infile);
fread(&height, sizeof(int), 1, infile);
fread(restOfDataTwo, 1, 28, infile);
int rowWidth = width * 3;
//Read Image Data
unsigned char image[height][(width * 3)];
fread(image, sizeof(char), imageSize, infile);
//Close
fclose(infile);
//#################################################
//Small BMP
//#################################################
FILE* smallOut;
smallOut = fopen("small.bmp", "wb");
//Small Vars
int imageSizeSmall = imageSize / 4;
int fileSizeSmall = imageSizeSmall + 54;
int widthSmall = width / 2;
int heightSmall = height / 2;
int smallRowWidth = widthSmall * 3;
unsigned char imageSmall[heightSmall][smallRowWidth];
//Image Data
int c, d, e;
//For every 4 pixels.. store one in small image
for(c = 0; c < rowWidth; c++) {
for(d = 0; d < height; d++) {
//imageSmall[d/2][c/2] = image[d][c];
for(e = 0; e < 3; e++) {
//grab every 1 out of 4 and place into small?
}
}
}
所以我有以下代码读取bmp图像,然后我需要将其缩小并输出到较小的版本,宽度的一半和高度的一半,因此总共小4倍。所以我知道我必须抓住每3个像素中的1个?把它放到我的新的smallImage中,但是我已经尝试了嵌套for循环的多个东西,但是无法将算法降低。我在stackexchange上查看了多个帖子,但人们正在使用库,我无法使用它们。 (家庭作业)。我不是在寻找有人为我做这件事,只是想找人指点我正确的方向或者给我一个暗示? 完整代码在这里。 https://pastebin.com/ZVmXtmCx
答案 0 :(得分:1)
您可以在以下地址对您的问题进行详细而详细的研究:
http://www.davdata.nl/math/bmresize.html
我引用:
这是通过从左到右,从上到下扫描这些像素来完成的 将目标像素投影到源位图上时。