일부 이미지를 그릴 수있는 libCairo를 기반으로하는 간단한 C ++ 프로그램이 있습니다 (예 : 이미지를 다른 이미지에 배치, 텍스트 쓰기 등). 스케일링 아티팩트를 피하기 위해 일부 SVG 파일을로드 한 다음 PNG에서로드 된 표면에 그려야합니다.
cairo_t
컨텍스트 를 포함하는 래퍼 클래스가 있으며 해당 컨텍스트에서 표면을 가져올 수 있습니다.
cairo_surface_t *CairoImage::getSurface() {
return cairo_get_target(context);
}
현재 다음과 같은 SVG 파일을로드합니다.
CairoImage::CairoImage(const char *path, double width, double height) {
auto surface = cairo_svg_surface_create(path, width, height);
context = cairo_create(surface);
}
그리고 이것이 제가 다른 이미지에 이미지를 그리는 방법입니다.
cairo_set_source_surface(context, image.getSurface(), 0, 0);
cairo_rectangle(context, x, y, image.getWidth(), image.getHeight());
cairo_clip(context);
cairo_paint(context);
cairo_reset_clip(context);
그러나 작동하지 않습니다 (아무것도 그리지 않습니다). 이 문제를 어떻게 해결할 수 있습니까?
Cairo는 SVG 파일을 쓸 수 있지만 읽을 수는 없습니다 .
SVG 파일을로드하려면 librsvg와 같은 것이 필요합니다. Google에서 간단한 librsvg 예제를 제공하려고했지만 찾지 못했습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다