大海捞针 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 
#include 
#include 
#include 
#include 
#include 

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

// C++
#include 

#endif //PCH_H

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

2. 编写代码

代码如下:

#include "pch.h"
#include 

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盘下获得一张图片,内容如下。
大海捞针 Skia(C++) 第 2 期:“Hello, Skia!”_第1张图片

至此,恭喜您,“Hello, Skia!”

你可能感兴趣的:(图形,Skia,c++)