Kanzi开发的时候会遇到需要从外部读取图片的情况。Kanzi2.8版本和3.3版本读取方法稍有不同,我们先看看2.8版本的api。

【2.8版本】

1)首先要从文件中读取一张图片

struct KzcImage* img;
kzcImageLoadFile(kzaApplicationGetSystemMemoryManager(application),"1.png",& img);

2)把文件中读取到的图片转成Texture

KzuImageTexture* texture;
kzuImageTextureCreateFromImage(resMgr, "FileTexture",img, KZU_TEXTURE_FILTER_BILINEAR, KZU_TEXTURE_WRAP_CLAMP, 0.0f, &texture);

或者从内存数据中创建一个Texture:

kzuImageTextureCreateFromMemory(resourceManger,name,KZU_TEXTURE_CHANNELS_RGB,img.width(), img.height(), img.bits(),KZU_TEXTURE_FILTER_BILINEAR, KZU_TEXTURE_WRAP_CLAMP, &imageTexture);

其中resourceManger是一个ResourceManger对象,name为Texture的名称,KZU_TEXTURE_CHANNELS_RGB为创建的图像模式,bits()为图片数据,最终创建到imageTexture中。

3)创建之后转成resource并赋给plane节点

struct KzuResource* out_resource;out_resource = kzuImageTextureToResource(texture);kzuObjectNodeSetResourceIDResourceProperty(planeNode,KZU_PROPERTY_TYPE_TEXTURE,out_resource);kzuObjectNodeSetIntProperty(m_planeNode, KZU_PROPERTY_TYPE_BLEND_MODE, 1);kzuResourceRelease(out_resource);

【3.3版本】

3.3可以参考kanzi安装目录下的 virtual listbox的例子。

下面是例子中的关键代码:

 1 if (m_itemInfo->m_objectNode && m_image)
 2 {
 3 Domain* domain = m_itemGenerator->m_listBox->getDomain();
 4
 5 // Create texture from image. If the image data format is correct, this shouldn't use any memory manager.
 6 // Image texture will own the image so no need to delete it manually.
 7 TextureSharedPtr texture = Texture::create(domain, m_image, Texture::CreateFlagClampAddress);
 8 m_itemInfo->m_objectNode->setProperty(StandardMaterial::TextureProperty, texture);
 9
10 // Adjust size of plane for displaying the image.
11 Node3DSharedPtr imagePlaneNode = m_itemInfo->m_objectNode->lookupNode<Node3D>("Stack Layout/Plane");
12
13 kzUint height = kzcImageGetHeight(m_image);
14 kzUint width = kzcImageGetWidth(m_image);
15 float aspect = width * 1.0f / height;
16
17 kzFloat widthFactor = aspect;
18 kzFloat heightFactor = 1.0f;
19
20 if(aspect > 1.0f)
21 {
22 widthFactor = 1.0f;
23 heightFactor = 1.0f / aspect;
24 }
25
26 imagePlaneNode->setLayoutTransformation(Matrix4x4::createScale(Vector3(widthFactor, heightFactor, 1.0f)));
27
28 // Ownership of image was transferred to the texture.
29 m_image = 0;
30 }
31
32 // Remove task.
33 m_itemGenerator->m_tasksByItems.erase(m_itemInfo);

3.3版本的代码暂时还没有分析,待补充……

转载于:https://www.cnblogs.com/littlemeng/p/5953091.html

Kanzi编程基础3 - 图片读取与显示相关推荐

  1. Opencv 图片 读取,显示,保存基本操作

    Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/ 为了使用方 便,主要是使用opencv的python版本的接口,其官网链接 ...

  2. python读取一张图片未响应_opencv python 图片读取与显示图片窗口未响应问题的解决...

    显示图像是 Opencv最基本的操作之一, imshow()函数可以实现该操作.如果使用过其他GUI框架背景,就会很自然地调用 imshow来显示一幅图像.但这个观点并不完全正确,因为图像确实会显示出 ...

  3. raw格式图片读取与显示C++,opencv

    Bayer是相机内部的原始图片, 一般后缀名为.raw.很多软件都可以查看, 比如PS.Bayer 模式被广泛应用于 CCD 和 CMOS 摄像头,它允许从一个单独平面中得到彩色图像.我们相机拍照下来 ...

  4. OPENCV-HDR图片读取,显示及转JPG

    OPENCV可以直接读取HDR图,代码如下: img = cv2.imread(hdr_path, flags = cv2.IMREAD_ANYDEPTH) 此时,显示的颜色会偏暗: 需要通过如下转换 ...

  5. Android Http基础:图片下载并显示和WebView的应用,android实战视频教程

    /** 在Android上发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient */ public class MainActivity extends Acti ...

  6. #OpenCV学习之图片读取,显示, 色彩空间变化,保存

    函数: nameWindow.imread.imshow.imwrite nameWindow void namedWindow(const String& winname, int flag ...

  7. python 图片的读取、显示、处理与保存(PIL和OpenCV)

    目录 0. 前言 1. 图片读取.显示和保存 2. PIL与cv2相互转换 3. 处理与保存 3.1 裁剪 3.2 绘制矩形 参考链接 0. 前言 先撇开matplotlib不谈,在python江湖用 ...

  8. OpenCV笔记(1)(图片读取与现实、色彩空间、基础运算、均值方差、逻辑运算、泛洪填充、均值中值及自定义平滑)...

    一.图片读取和显示 import cv2 as cv# 图片读取cv.imread(img_path) car_img = cv.imread("car1.png") # 图片显示 ...

  9. 图像的读取,显示与保存(基于skimage模块)

    一 skiamge模块 skimage包的全称是scikit-image SciKit (toolkit for SciPy) ,它对scipy.ndimage进行了扩展,提供了更多的图片处理功能.它 ...

最新文章

  1. ARM学习书单一提供打包下载地址
  2. 源头防堵信息泄露 监管拟全面推行支付标记化
  3. 美国国家安全局(NSA)网络攻击主战武器“验证器”
  4. 关于英语单词记忆的总结
  5. python进行回归分析与检验_R/python-回归分析
  6. 淘宝购物车5年技术升级与沉淀
  7. 整理归纳:《一课经济学》—— 只见树木不见森林
  8. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 6月29日
  9. ckplayer.js插件基于网页flash播放rtmp、hls
  10. html的几种选择器
  11. 盘点气压传感器在智能手机中应用场景 智芯传感板装式压力传感器提升产品性能
  12. 磕磕碰碰搭建Nginx实现接口映射
  13. 《数据结构与算法 Python语言实现》书评与学习心得
  14. stm32智能小车设计(1)——硬件选型思路
  15. 浅谈GD32与STM32之间的区别
  16. 实验六:分析Linux内核创建一个新进程的过程
  17. [bzoj4722]由乃
  18. 20行代码做一个简易微信群发工具需要哪些单词
  19. O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
  20. Stata结果输出:outreg2命令详解

热门文章

  1. 别让for循环毁了你的程序(二)
  2. 零序电流计算软件_每天5分钟跟我一起学电气之电力系统中的零序
  3. 【Elasticsearch】Elasticsearch-Hadoop打通Elasticsearch和Hadoop
  4. 【java】java 的网络地址类 InetSocketAddress
  5. 【Spring】Spring lazy-init:bean延迟初始化
  6. 【kafka】kafka Offset commit failed on partition The coordinator is not aware of this member
  7. 【Avro】两种根据avsc文件生成avro序列化的实体类-maven和avro-tool
  8. 20-10-023-安装-KyLin-2.5.2-单机版安装(MAC)成功
  9. 95-190-544-源码-window-清除器(Evictors)-DeltaEvitor简介
  10. Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching