ビットマップ画像のRGBの値を出力するプログラムを書いたのですが、今度は画像の左下から10×10の画素ずつ区切って出力させるプログラムに直すことになりました。
計算式が難しいのでぜひともお知恵をお貸しください。
y2 = bi.biHeight;
x2 = bi.biWidth;
for ( y = 0; y <= y2; y++ ) {
for ( x = 0; x <= x2; x++ ) {
if((x % 10) == 0){y = y+1; x = 0; x3 = x;}
if((y % 10) == 0){x = 0; y3 = x;}
R = data[ y ][ x ].rgbtRed;
G = data[ y ][ x ].rgbtGreen;
B = data[ y ][ x ].rgbtBlue;
printf("X軸:%d,Y軸:%d, R:%d, G:%d, B:%d\n", x, y, R, G, B);
}
}
さんざん悩んで今はこんな状態です。
ビットマップ画像の10×10で区切って出力
Re:ビットマップ画像の10×10で区切って出力
>>SITさん
こんにちは。
ソースコードはプレタグで字下げして投稿して下さいね。
さて、区切って出力するというのは具体的にどうするのですか?
値をprintfで表示すればいいのか、それとも個別にファイルに保存するのか・・。
また、yは数が多い方と少ない方、どちらが下ですか?
こんにちは。
ソースコードはプレタグで字下げして投稿して下さいね。
さて、区切って出力するというのは具体的にどうするのですか?
値をprintfで表示すればいいのか、それとも個別にファイルに保存するのか・・。
また、yは数が多い方と少ない方、どちらが下ですか?
******** 参考までに ********* #include <stdio.h> #define H 200 #define W 100 int main(){ int x,y; for(y=0; y<H; y+=10){ for(x=0; x<W; x+=10){ printf("区切った10x10の左上の座標は[%d,%d]\n",x,y); } } return 0; }
Re:ビットマップ画像の10×10で区切って出力
Dixq様説明がかなり曖昧で申し訳ありません。
まず画像の左下が(0,0)です。
y2 = bi.biHeight;
x2 = bi.biWidth;
for ( y = 0; y <= y2; y++ ) {
for ( x = 0; x <= x2; x++ ) {
R = data[ y ][ x ].rgbtRed;
G = data[ y ][ x ].rgbtGreen;
B = data[ y ][ x ].rgbtBlue;
printf("X軸:%d,Y軸:%d, R:%d, G:%d, B:%d\n", x, y, R, G, B);
}
}
こうすると画像の左下からすべての画素をprintfで出力できたのですが、今度は左下から10×10の画素ずつ区切ってすべての画素をprintfで出力するプログラムです。
まず画像の左下が(0,0)です。
y2 = bi.biHeight;
x2 = bi.biWidth;
for ( y = 0; y <= y2; y++ ) {
for ( x = 0; x <= x2; x++ ) {
R = data[ y ][ x ].rgbtRed;
G = data[ y ][ x ].rgbtGreen;
B = data[ y ][ x ].rgbtBlue;
printf("X軸:%d,Y軸:%d, R:%d, G:%d, B:%d\n", x, y, R, G, B);
}
}
こうすると画像の左下からすべての画素をprintfで出力できたのですが、今度は左下から10×10の画素ずつ区切ってすべての画素をprintfで出力するプログラムです。
Re:ビットマップ画像の10×10で区切って出力
添付した画像でご説明すると①の中のすべての画素をprintfで出力します。
次に②の中のすべてを出力して③・④と同じ事して、画像の端まで行ったら⑤に進んで同じことをしていきます。
ただ画素を出力する画像のサイズが不明なので、
上記のようにしてどんなサイズでも対応できるようにしています。
次に②の中のすべてを出力して③・④と同じ事して、画像の端まで行ったら⑤に進んで同じことをしていきます。
ただ画素を出力する画像のサイズが不明なので、
y2 = bi.biHeight; x2 = bi.biWidth; for ( y = 0; y <= y2; y++ ) { for ( x = 0; x <= x2; x++ ) {
上記のようにしてどんなサイズでも対応できるようにしています。
Re:ビットマップ画像の10×10で区切って出力
for ( y = 0; y <= y2; y + 10 ) { for ( x = 0; x <= x2; x + 10 ){ /追加 for( yy = y; yy < y ; yy++){ /追加 for( xx = x; xx < x ; xx++){ R = data[ y ][ x ].rgbtRed; G = data[ y ][ x ].rgbtGreen; B = data[ y ][ x ].rgbtBlue; printf("Y軸:%d,X軸:%d, R:%d, G:%d, B:%d\n", y, x, R, G, B); } } } }先ほどいじってみてこうなりました。
合っていると思うのですが実行しても何も表示されません・・・。
Re:ビットマップ画像の10×10で区切って出力
for ( y = 0; y <= y2; y + 10 ) {
最初 y = 0
for( yy = y; yy < y ; yy++){
yy = y ・・・ yy = 0
↓
yy < y → 0 < 0・・・yの値がどんな値でも条件を満たさない
ループの条件を満たしてないので、ループの中の処理に
入っていかないハズです。
あと、
for ( y = 0; y <= y2; y + 10 ) {
yに10を足すなら y+10 ではなく、 y+=10 じゃないと加算されません。
xについても同様で。
最初 y = 0
for( yy = y; yy < y ; yy++){
yy = y ・・・ yy = 0
↓
yy < y → 0 < 0・・・yの値がどんな値でも条件を満たさない
ループの条件を満たしてないので、ループの中の処理に
入っていかないハズです。
あと、
for ( y = 0; y <= y2; y + 10 ) {
yに10を足すなら y+10 ではなく、 y+=10 じゃないと加算されません。
xについても同様で。
Re:ビットマップ画像の10×10で区切って出力
y2 = bi.biHeight; x2 = bi.biWidth; for ( y = 0; y <= y2; y = y + 10) { for ( x = 0; x <= x2; x = x + 10){ for( h = y; h > y + 10; h++){ for( w = x; w > x + 10; w++){ R = data[ y ][ x ].rgbtRed; G = data[ y ][ x ].rgbtGreen; B = data[ y ][ x ].rgbtBlue; printf("Y軸:%d,X軸:%d, R:%d, G:%d, B:%d\n", y, x, R, G, B); } } } }Libraさん、ご指摘ありがとうございます。
書き直してみましたがまだうまくprintfで出ません・・。
Re:ビットマップ画像の10×10で区切って出力
やりたいことがよく理解できてないので、間違っているかも知れませんが。
y2 = bi.biHeight; //縦の画素数 x2 = bi.biWidth; //横の画素数 for ( y = 0; y < y2; y = y + 10) { for ( x = 0; x < x2; x = x + 10){ for( h = y; h < y + 10 && h < y2; h++){ for( w = x; w < x + 10 && w < x2; w++){ R = data[ h ][ w ].rgbtRed; G = data[ h ][ w ].rgbtGreen; B = data[ h ][ w ].rgbtBlue; printf("Y軸:%d,X軸:%d, R:%d, G:%d, B:%d\n", y, x, R, G, B); } } } }
Re:ビットマップ画像の10×10で区切って出力
Dixq様 Libra様 non様
説明が不明確で申し訳ありませんでした。
プログラムを以下のようにしたらうまくいけました。
ご迷惑とお手数を取らせてしまいすいません。
説明が不明確で申し訳ありませんでした。
プログラムを以下のようにしたらうまくいけました。
ご迷惑とお手数を取らせてしまいすいません。
//RGB別に出力する for ( y = 0; y <= bi.biHeight; y++ ) { data[ y ] = (RGBTRIPLE *)((char*)buf + LineSize * y); } fread( buf, BufferSize, 1, fp ); n1 = z1 + 10; n2 = w1 + 10; for ( y = z1; y < n1; y++ ) { for ( x = w1; x <= n2; x++) { if(x >= n2){ x = n2; n2 = n2 + 10; }else if(y >= n1){ y = n1; n1 = n1 + 10; } if(n2 > w2){ break; }else if(n1 > z2){ break; } R = data[ y ][ x ].rgbtRed; G = data[ y ][ x ].rgbtGreen; B = data[ y ][ x ].rgbtBlue; printf("Y軸:%d,X軸:%d, R:%d, G:%d, B:%d\n", y, x, R, G, B); } } return 0;