Skip to main content

Skia

Download

Dept Tools

git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
mv depot_tools/* /usr/local/bin

Skia

git clone https://skia.googlesource.com/skia.git
cd skia
python3 tools/git-sync-deps
bin/fetch-ninja

Build

bin/gn gen out/Shared --args='is_official_build=false is_component_build=true is_debug=false'
ninja -C out/Shared

Install

sudo cp -R out/Shared/lib* /usr/local/lib/
sudo cp -R include /usr/local/include/skia

Devcontainer

FROM mcr.microsoft.com/devcontainers/cpp:0-ubuntu-22.04

COPY source/ /source

ENV LD_LIBRARY_PATH=/usr/local/lib

RUN cd /source && \
tar xf depot_tools.tar.gz && \
mv depot_tools/* /usr/local/bin && \
rm -r depot_tools* && \
tar xf skia.tar.gz && \
rm -rf skia.tar.gz && \
unzip ninja-linux-amd64.zip -d skia/third_party/ninja && \
cd /source/skia && \
sudo apt-get update && sudo apt-get -y upgrade && \
sudo apt-get install -y \
build-essential \
freeglut3-dev \
libfontconfig-dev \
libfreetype6-dev \
libgl1-mesa-dev \
libglew-dev \
libglfw3-dev \
libglu1-mesa-dev \
libicu-dev \
libjpeg-dev \
libpng-dev \
libspdlog-dev \
libvulkan-dev \
libwebp-dev \
mesa-common-dev && \
bin/gn gen out/Shared --args='is_official_build=false is_component_build=true is_debug=false' && \
ninja -C out/Shared && \
sudo cp -R out/Shared/lib* /usr/local/lib/ && \
sudo cp -R include /usr/local/include/include && \
cd / && rm -rf /source
#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkData.h"
#include "include/core/SkEncodedImageFormat.h"
#include "include/core/SkColor.h"
#include "include/core/SkPaint.h"
#include "include/core/SkImageEncoder.h"
#include "include/core/SkRect.h"
#include "include/core/SkStream.h"

int main()
{
const int width = 800;
const int height = 600;
SkBitmap bitmap;
bitmap.allocN32Pixels(width, height);
SkCanvas canvas(bitmap);
canvas.clear(SK_ColorGRAY);

SkRect rect = SkRect::MakeLTRB(100, 100, 300, 200);
SkPaint paint;
paint.setColor(SK_ColorRED);
paint.setStyle(SkPaint::kFill_Style);
canvas.drawRect(rect, paint);

SkPixmap pixmap;
bitmap.peekPixels(&pixmap);
sk_sp<SkData> pngData = SkEncodePixmap(pixmap, SkEncodedImageFormat::kPNG, 100);
if (pngData)
{
SkFILEWStream stream("output.png");
stream.write(pngData->data(), pngData->size());
}
}

Output: