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/ZVmXtmCxC言語のBMP画像を縮尺する
まあ私は各ピクセルが3バイトである4ピクセルのうち1ピクセルを必要としますか?私は – Jacob
[画像スケーリングアルゴリズム](https://en.wikipedia.org/wiki/Image_scaling)を実装しようとしていると思いますか? –
私は、イメージを単純に幅の半分と半分の大きさに縮小しようとしています。だから私の2D配列(私の元の画像データをBMPヘッダーのものなしで保持している)上でループを実行してから、新しい4番目のピクセルを新しい小さな画像配列に配置します。私はまた、より大きな画像(4倍のサイズ)を作成することによって同じことをする必要があります – Jacob