在Skia图形库中,画布的原点默认位于左上角。如果你希望将原点设置在左下角,可以通过对画布进行坐标变换来实现。以下是实现这一目标的基础概念和相关步骤:
要将Skia中的画布原点设置为左下角,你需要执行以下步骤:
以下是一个简单的示例代码,展示了如何在Skia中将画布原点设置为左下角:
#include "include/core/SkCanvas.h"
#include "include/core/SkSurface.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkRect.h"
#include "include/core/SkColor.h"
#include "include/core/SkPaint.h"
void draw(SkCanvas* canvas) {
// 创建一个红色的画笔
SkPaint paint;
paint.setColor(SK_ColorRED);
paint.setStyle(SkPaint::kFill_Style);
// 获取画布的尺寸
SkRect bounds = canvas->getLocalBounds();
// 在左下角绘制一个矩形
canvas->drawRect(SkRect::MakeXYWH(0, bounds.height(), 100, 100), paint);
}
int main() {
// 创建一个100x100的画布
const int width = 100;
const int height = 100;
SkImageInfo imageInfo = SkImageInfo::Make(width, height, kRGBA_8888_SkColorType, kOpaque_SkAlphaType);
sk_sp<SkSurface> surface(SkSurface::MakeRaster(imageInfo));
SkCanvas* canvas = surface->getCanvas();
// 应用变换,将原点移动到左下角
canvas->concat(SkMatrix::MakeScale(1, -1)); // 垂直翻转
canvas->translate(0, -height); // 平移
// 绘制图形
draw(canvas);
// 保存结果到文件(可选)
sk_sp<SkImage> image(surface->makeImageSnapshot());
if (image) {
sk_sp<SkData> data(image->encodeToData(SkEncodedImageFormat::kPNG, 100));
if (data) {
SkFILEWStream("output.png").write(data->data(), data->size());
}
}
return 0;
}
SkSurface::MakeRaster
创建一个100x100的画布。SkMatrix::MakeScale(1, -1)
进行垂直翻转,使y轴方向反转。canvas->translate(0, -height)
将画布向上平移 height
个单位,使得原点移动到左下角。这种变换在需要以左下角为原点的应用中非常有用,例如:
通过这种方式,你可以灵活地调整坐标系,以适应不同的应用需求。
领取专属 10元无门槛券
手把手带您无忧上云