다음 작업을 수행 할 필요가있는 작은 데모 응용 프로그램을 쓰고 있어요 사용하여 PNG 이미지를 저장 :도 의 X 번호에 의해 참조 PNG
이미지 파일 회전 카이로
PNG
이미지를
- 읽기
- 새 이미지를 애니메이션 프레임으로 저장
- 마지막 회전 결과가 회전 할 때까지 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
호출의 순서를 재 배열하려고 시도했을 것입니다. 아마 표면 또는 컨텍스트의 상태와 관련이 있다고 생각할 것입니다.
(가) 시작과 끝 이미지는 다음과 같습니다
나는 무엇을 놓치고?
대단히 감사합니다. 도움을 주셔서 감사 드리며 내가 잘못하고있는 것을 이해하고 있다고 생각합니다. – Chimera