• gpu与image的来回转换


    src\third_party\skia\docs\examples

    在 gpu 上绘制,然后用surface的snapshot获取 图片; 

    skimage也可以直接从texture

    // Copyright 2019 Google LLC.
    // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
    #include "tools/fiddle/examples.h"
    // HASH=06aeb3cf63ffccf7b49fe556e5def351
    REG_FIDDLE(Image_MakeBackendTextureFromSkImage, 256, 64, false, 0) {
    static sk_sp<SkImage> create_gpu_image(GrRecordingContext* rContext) {
        // rContext 是个gpu绘制上下文
        const SkImageInfo info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType);
        auto surface(SkSurface::MakeRenderTarget(rContext, SkBudgeted::kNo, info));
        
        //通过canvas绘制,绘制在gpu进行
        SkCanvas* canvas = surface->getCanvas();
        canvas->clear(SK_ColorWHITE);
        SkPaint paint;
        paint.setColor(SK_ColorBLACK);
        canvas->drawRect(SkRect::MakeXYWH(5, 5, 10, 10), paint);
        //获取刚才绘制的图片
        return surface->makeImageSnapshot();
    }
    
    void draw(SkCanvas* canvas) {
        auto dContext = GrAsDirectContext(canvas->recordingContext());
        if (!dContext) {
            return;
        }
        sk_sp<SkImage> backEndImage = create_gpu_image(dContext);
        canvas->drawImage(backEndImage, 0, 0);
        
        //将图片绘制到gpu的texture上
        GrBackendTexture texture;
        SkImage::BackendTextureReleaseProc proc;
        if (!SkImage::MakeBackendTextureFromSkImage(dContext, std::move(backEndImage),
                                                    &texture, &proc)) {
            return;
        }
        //从texture绘制获取成skimage图片。
        sk_sp<SkImage> i2 = SkImage::MakeFromTexture(dContext, texture, kTopLeft_GrSurfaceOrigin,
                                                     kN32_SkColorType, kOpaque_SkAlphaType, nullptr);
        canvas->drawImage(i2, 30, 30);
    }
    }  // END FIDDLE
  • 相关阅读:
    配置双jdk
    检测一个页面所用的时间的js
    java发送短信开发,第三方接口方法
    jq的常用事件及其案例
    ajax无法返回视图
    SpringMVC IO 文件上传
    及上一篇linux安装mysql的说明
    centos6.10下安装mysql8.0.16root密码修改的坑
    线程池学习
    数组的分隔
  • 原文地址:https://www.cnblogs.com/bigben0123/p/16662740.html
Copyright © 2020-2023  润新知