私は次のことを行う必要がある小さなデモアプリケーションを書いています:
- 参照
PNG
画像ファイルを読み込む PNG
画像をx度回転します- 新しい画像をアニメーションのフレームとして保存します
- 最後の回転の結果で、回転が完了するまでステップ2に戻ります。
結果は、さまざまな回転角度での画像を示す一連のPNG
画像ファイルになります。これらの画像は、何らかの形で映画またはアニメーションに結合されGIF
ます。
1回転を試みる次のコードを作成しました。
#include <cairo.h>
#include <math.h>
/**** prototypes *******/
void Rotate( cairo_surface_t *image, int degress, const char *fileName );
double DegreesToRadians( double degrees );
/***********************/
double DegreesToRadians( double degrees )
{
return((double)((double)degrees * ( (double)M_PI/(double)180.0 )));
}
void Rotate( cairo_surface_t *image, int degrees, const char *fileName )
{
int w, h;
cairo_t *cr;
cr = cairo_create(image);
w = cairo_image_surface_get_width (image);
h = cairo_image_surface_get_height (image);
cairo_translate(cr, w/2.0, h/2.0);
cairo_rotate(cr, DegreesToRadians( degrees ));
cairo_translate(cr, - w/2.0, -h/2.0);
cairo_set_source_surface(cr, image, 0, 0);
cairo_paint (cr);
cairo_surface_write_to_png(image, fileName );
cairo_surface_destroy (image);
cairo_destroy(cr);
}
int main()
{
cairo_surface_t *image = cairo_image_surface_create_from_png ("images/begin.png");
Rotate(image, 90, "images/end.png");
return( 0 );
}
問題は、元の画像を90度回転させた後、保存された画像が回転しますが、正確には回転しないことです。cairo
表面の状態やコンテキストに関係しているのではないかと考えて、呼び出しの順序を並べ替えてみました。
開始画像と終了画像を以下に示します。
私は何が欠けていますか?