• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語による間引き拡大縮小)

C言語による間引き拡大縮小

このQ&Aのポイント
  • C言語による24bppのRawファイル(RGB)の間引き拡大縮小の方法に関してアドバイスを求めています。
  • 質問者は、拡大縮小後の画像サイズを計算し、単純補間・間引きの処理を行っている部分について悩んでいます。
  • アドバイスをいただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

二次元配列を使っている元のプログラムのrescaleから、一次元配列のこのプログラムにするのにどうしましたか? rescale[x,y] を rescale[ y * hxsize + x ]にしてますよね? ( 実際には、RGB3プレーン分で 3*(i * hxsize + j)ですが) 同じように、layer[x.y]は layer[y * width +x]です (同様に3プレーンで3倍です) 注意しなければいけないのは、yposがdoubleである点です。 小数点以下があると、 その分だけ横にずれてしまいます。なので、*widthの前にintにしておく必要があります rescale[i+j] =layer[((int)xpos+((int)ypos)* width)*3]; rescale[i+j+1] =layer[((int)xpos+((int)ypos)* width)*3+1]; rescale[i+j+2] =layer[((int)xpos+((int)ypos)* width)*3+2]; ちなみに、私なら ・画像の座標の計算をやりやすくために、0≦i<hySize,0≦j<hxSizeにする ・doubleを足していくと誤差がたまるので、その都度xpos,yposを計算する ということで for (int i = 0; i < hySize; ++ i) { ypos = i * hokanY ; for (int j=0;j<hxSize; ++ j) { // 単純補間・間引き xpos = j * hokanX; int rescalep=3*(i * hxSize +j); int layerp=3*((int)ypos * width+ (int)xpos); rescale[rescalep] =layer[layerp]; rescale[rescalep+1] =layer[layerp+1]; rescale[rescalep+2] =layer[layerp+2]; } }

momokotug
質問者

お礼

はじめまして!こんにちは! 分かりやすい説明ありがとうございました!! とってもよくわかりました。>< 無事に実装できました☆ ありがとうございます!m(__)m

関連するQ&A