タグ

algorithmとbitmapに関するrestartrのブックマーク (2)

  • C言語による画像回転処理について

    回転処理において処理結果に入力画像すべてが収まるようにするためには出力画像の大きさを計算する必要があります。 幅:sw、高さ:shの画像をA度回転させたときの出力画像の幅(dw)、高さ(dh)は次のように計算されます。 ( fabs() : math.hで定義されている浮動小数の絶対値を得る標準関数 ) dw = fabs( sw * cos(A) ) + fabs( sh * sin(A) ) dh = fabs( sw * sin(A) ) + fabs( sh * cos(A) ) 実際のプログラム上では幅高さは整数でないといけないので、通常次のように四捨五入をして結果を求めます。 int dw = (int)( fabs( sw * cos(A) ) + fabs( sh * sin(A) ) + 0.5 ) int dh = (int)( fabs( sw *

  • ビットマップの回転処理

    数学の入門書には、良く図形の回転が取り上げられます。これは、ある数式で座標上の点を別の点に移して行く、というものでこれによって図形が回転して傾いたように見えるわけです。ただ、これをビットマップに対して行い画像の回転処理に適用しようとすると、穴だらけになってしまい実用になりません。 今回は、その対策を考えてみましょう。 図形の回転 座標面xyで、ある点(x, y)をΘだけ回転させて(x', y')に移すには、以下の計算を行います。 x’=x×cosΘ-y×sinΘ y’=x×sinΘ+y×cosΘ この式をもとにすると、1ピクセル1バイト・width×heightピクセルのビットマップ(lpBMP)をsラジアン回転させて別のビットマップ(lpBMP2)に描画するプログラムは以下のようになるはずですね。 for (i=0;i<height;i++) for(j=0;j<width;j++) {

  • 1