in.bmp の画像の左半分に 16×16 画素のモザイクをかけて out.bmp に出力するプログラム image1mosaic.c を作成せよ. 16×16 画素毎に (その 256 画素の) 平均値を計算し, その値をその 16×16 画素すべてに代入すればよい
という問題なのですが、現在かけているプログラムは下記に貼っているものです。
これだと左半分に斑点のようなものが書けるだけでモザイクになりません。
どこが違うかご指摘いただけないでしょうか?
#include<stdio.h>
#include "image1.h"
void bmp_mosaic(bmp_header_t *hd, pixel_t img[MAX_Y][MAX_X]);
int main(void){
bmp_header_t hd; pixel_t img[MAX_Y][MAX_X]; bmp_read("in.bmp", &hd, img); //読み込み bmp_mosaic(&hd, img); //呼び出し bmp_write("out.bmp", &hd, img); //書き出し return 0;
}
//画像処理の関数の本体
void bmp_mosaic(bmp_header_t *hd, pixel_t img[MAX_Y][MAX_X]){
int i, j, x, y; unsigned int rr, gg, bb; int size = 16; for(i = 0; i < hd -> biHeight; i += size){ for(j = 0; j < hd -> biWidth / 2; j += size){ rr = 0; gg = 0; bb = 0; for(x = 0; x < size; x++){ if(hd -> biHeight < (i + x)){break;} for(y = 0; y < size; y++){ if(hd -> biWidth < (j + y)){break;} rr += img[i + x][j + y].r; gg += img[i + x][j + y].g; bb += img[i + x][j + y].b; } } rr = rr / size * size; gg = gg / size * size; bb = bb / size * size ; for(x = 0; x < size; x++){ for(y = 0; y < size; y++){ img[i + x][j + y].r = rr; img[i + x][j + y].g = gg; img[i + x][j + y].b = bb; } } } }
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/25 06:44