티스토리 뷰

728x90

다운로드

How to download Skia | Skia 를 참고해서 depot_tools를 설치하고 소스를 다운로드한다.

추가로, ninja와 bazel은 따로 설치해둬야 한다.

 

depot_tools 설치

git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
export PATH="${PWD}/depot_tools:${PATH}"

 

소스 다운로드

git clone https://skia.googlesource.com/skia.git

 

 

빌드

How to build Skia | Skia 를 참고해서 플랫폼에 맞게 빌드하면 된다.

 

리눅스에서는 아래 커맨드들을 입력해주면 된다.

bin/gn gen out/Debug
tools/install_dependencies.sh
ninja -C out/Debug

 

샘플 코드 추가 및 빌드

Skia 프로젝트에서 새로운 프로그램을 추가하고 빌드하려면, cpp 파일을 추가하고 BUILD.gn 파일에 빌드 세팅을 입력해줘야 한다.

 

skia/ 폴더 아래에 HelloWorld/hello_word.cpp 처럼 파일과 폴더를 추가해주었다.

#include "include/core/SkCanvas.h"
#include "include/core/SkGraphics.h"
#include "include/core/SkPaint.h"
#include "include/core/SkSurface.h"
#include "include/core/SkData.h"
#include "include/core/SkImage.h"
#include "include/core/SkStream.h"
#include "include/encode/SkPngEncoder.h"
#include <iostream>

void draw(SkCanvas* canvas) {
    SkPaint p;
    p.setColor(SK_ColorRED);
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    p.setStrokeWidth(10);

    canvas->drawLine(20, 100, 100, 100, p);
}

int main() {
    // Skia 초기화
    SkGraphics::Init();

    // 800x600 크기의 서피스 생성
    SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(800, 600);
    sk_sp<SkSurface> surface = SkSurfaces::Raster(imageInfo);
    SkCanvas* canvas = surface->getCanvas();

    // Draw
    draw(canvas);

    // 이미지 스냅샷 생성
    sk_sp<SkImage> image = surface->makeImageSnapshot();

    // PNG 데이터로 인코딩
    sk_sp<SkData> pngData = SkPngEncoder::Encode(nullptr, image.get(), {});
    if (!pngData) {
        std::cerr << "Failed to encode image to PNG data." << std::endl;
        return -1;
    }

    // 파일로 저장
    SkFILEWStream out("output.png");
    out.write(pngData->data(), pngData->size());
    std::cerr << "Saved output.png" << std::endl;

    // Skia 종료
    SkGraphics::PurgeAllCaches();

    return 0;
}

 

skia 폴더 아래에 BUILD.gn 파일이 있고, 파일 마지막에 아래와 같이 빌드 정보를 추가해준다. 

executable("hello_world") {
  sources = [
    "HelloWorld/hello_world.cpp",
  ]
  deps = [
    ":skia",
  ]
}

 

그리고 다음 명령어를 입력하여 build config를 만들어준다.

 bin/gn gen out/Debug

 

이제 hello_world 타겟을 빌드하면 된다.

ninja -C out/Debug hello_world

 

out/Debug/ 경로 아래에 hello_world 실행 파일이 생성되고, 아래와 같이 실행하면 skia/의 root 디렉토리에 바로 output.png가 생성된다.

$ ./out/Debug/hello_world
Saved output.png

 

열어보면 skia가 생성한 이미지가 보인다.

728x90

'개발 > Skia' 카테고리의 다른 글

Skia 예제 코드 및 실행 결과 확인  (0) 2024.08.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함