Skia
The Skia Graphics Engine is a compact open source graphics library written in C++. It was originally developed by Skia Inc., which was subsequently acquired by Google in 2005, who then released the software as open source licensed under the New BSD License free software license.
skia 는 구글폰 안드로이드 운영체제에도 포함되며, 이번 크롬 브라우저 공개때 먼저 공개됐다. 구글이 2005년 인수한 소프트웨어를 기반으로 제작되었다. skia 는 그리스어로 그림자란 뜻이라고 한다.
Why Skia?
- GDI 는 SVG, Canvas, 복잡한 UI처리에 full-featured로 충분하지 못하다.
- SKIA 는 google이 needs에 맞게 수정 가능하다.
- There was already a high-quality Webkit/Canvas port to Skia.
- GDI+는 더이상 MS에의해 개발되어지지 않으며, 대부분의 동작에서 SKIA보다 느리다.
- GDI+ text 렌더링은 GDI text 렌더링과 호환 되지 않는다.
Sample example
#include "SkBitmap.h"
#include "SkDevice.h"
#include "SkRect.h"
void CMainFrame::OnSkiaTestskia()
{
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
bitmap.allocPixels();
SkDevice device(bitmap);
SkCanvas canvas(&device);
SkPaint paint;
SkRect r;
paint.setARGB(255,255,255,255);
r.set(10,10,100,100);
canvas.drawRect(r, paint);
paint.setARGB(128, 0, 0, 255);
r.set(50, 50, 150, 150);
canvas.drawRect(r, paint);
{
SkAutoLockPixels image_lock(bitmap);
CxImage image;
image.CreateFromArray((BYTE*)bitmap.getPixels(), bitmap.width(), bitmap.height(), 32, bitmap.rowBytes(), false);
image.Save("_skia.png", CXIMAGE_FORMAT_PNG);
}
CWinApp *app = AfxGetApp(); ASSERT(app);
app->OpenDocumentFile("_skia.png");
}
Android Native code 작성방법
안드로이드는 Skia 그래픽 라이브러리를 사용한다.
- Skia 라이브러리는 NDK에서 제공하지 않음.
- Skia 라이브러리를 사용한 코드를 빌드하려면 안드로이드 풀 소스를 받아 빌드하거나 Skia 라이브러리 (오픈 소스임)를 받아서 따로 링크해줘야 함.
- Skia 헤더 파일을 코드에 추가.
- 안드로이드 mk 파일에 다음과 같이 라이브러리 위치 추가 (안드로이드 풀 소스에서 빌드 시에).
LOCAL_C_INCLUDES := \
external/skia/include/core \
external/skia/include/effects \
external/skia/include/images \
external/skia/include/utils \