大海捞针 Skia(C++) 第 2 期:“Hello, Skia!”

内容简介

本期将带领大家完成最经典的程序——“Hello, Skia!”。图形库表现方式主要以图像为主,因此,我们将会以图像的形式完成第一个项目。

关键词:文字、PNG图像、文件流

具体操作

1. 预编译头与静态库配置

打开Visual Studio,新建控制台项目(Console Project),添加预编译头(Precompiled Header)。
在你的预编译头文件(默认为pch.h)中添加对应头文件。
本期我们需要的头文件如下:

#ifndef PCH_H
#define PCH_H

// Skia
#include <include/core/SkCanvas.h>
#include <include/core/SkBitmap.h>
#include <include/core/SkPaint.h>
#include <include/core/SkTypeface.h>
#include <include/core/SkFont.h>
#include <include/codec/SkCodec.h>
#include <include/core/SkImageEncoder.h>

// Skia Depency
// Skia依赖于Direct的一些库,按照如下复制即可
#include <d3d12.h>
#pragma comment(lib, "D3D12.lib")
#include <d3dcompiler.h>
#pragma comment(lib, "d3dcompiler.lib")
#pragma comment(lib, "Opengl32.lib")
#ifdef _DEBUG
#include <dxgi1_3.h>
#pragma comment(lib, "DXGI.lib")
#endif // _DEBUG

// C++
#include <Windows.h>

#endif //PCH_H

接着,在项目管理中,链接静态库skia.lib

2. 编写代码

代码如下:

#include "pch.h"
#include <iostream>

int main()
{
	SkBitmap bitmap;  //创建一个位图设备
	SkImageInfo imageInfo = SkImageInfo::Make(480, 320, kBGRA_8888_SkColorType, kPremul_SkAlphaType);  //设置位图信息
	bitmap.allocPixels(imageInfo, imageInfo.minRowBytes());  //为位图设备绑定信息和分配内存

	SkCanvas canvas(bitmap);  //创建画布
	SkPaint paint;  //创建画笔
	canvas.clear(SkColorSetARGB(0xFF, 0x14, 0x14, 0x14));
        //将画布清空并填充一种颜色,注意这里是ARGB,Alpha通道值在第一位,同时可以直接用16进制数表示,例如上面这个颜色值可以表示为0xFF141414
	paint.setColor(SK_ColorWHITE);
        //设置画笔颜色

	SkFont font;  //创建字体设备
	font.setSize(64);  //设置字体尺寸
	font.setTypeface(SkTypeface::MakeFromName("Microsoft YaHei", SkFontStyle::Normal()));  //设置字体
	SkString text("Hello, Skia!");
	canvas.drawSimpleText(text.c_str(), text.size(), SkTextEncoding::kUTF8, 0, 64, font, paint);  //在画布上绘制字体

	SkFILEWStream stream("D:\\test.png");  //创建文件输出流
	SkEncodeImage(&stream, bitmap, SkEncodedImageFormat::kPNG, 100);  //将位图数据按照指定格式编码并输出到文件中

	return 0;
}

在此,值得注意的是,我们使用SkCanvasdrawSimpleText方法进行绘制,其中第三个参数是字符串的编码,这里使用的Skia版本仅支持四种编码。在进行绘制时,一定保证字符串编码与所选择编码一致。这里作者的Visual Studio默认使用标准UTF-8(不带BOM)编码,若未进行编码设置,则可能默认为GB2312,在绘制前需转换为UTF-8编码。

在完成上述操作后,我们将会在D盘下获得一张图片,内容如下。

至此,恭喜您,“Hello, Skia!”
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值