No.6_1 OpenCL 图像采样器——图像裁剪

本文介绍了如何使用 OpenCL 1.1 的图像采样器从大图像中截取256x256的矩形区域,并将其保存为新的图像文件。通过创建图像对象、设置采样器属性和执行读写操作,程序实现了图像裁剪功能。在华为设备上运行,由于支持OpenCL 1.1,使用 clCreateImage2D 创建图像对象。采样器用于处理超出图像区域的坐标,可设置规格化坐标、寻址模式和过滤模式。
摘要由CSDN通过智能技术生成

简介

在 OpenCL 1.1 中,已经支持对图像的读写。本文描述如何通过 OpenCL API 调用,从一张较大的图像中截取一块矩形区域,供图片浏览器显示。该程序实现的功能和 No.1_YUV420pScissor 类似,不同的是 No.1_YUV420pScissor 中直接对像素数据进行处理,而该程序中通过 OpenCL 内置图像读写函数来对像素数据进行采样。

实现

该程序接收 No.2_2_FreeImage 中由函数 load_image 保存的二进制图像数据,然后通过 OpenCL 来提取其中的部分矩形区域,将该矩形区域保存为二进制图像文件。最后将提取的矩形区域像素使用 No.2_2_FreeImage 中 store_image 函数保存为位图文件,供图片浏览器查看。具体执行流程可参考 No.2_2_FreeImage。

由于截取的矩形区域图像为 256x256,在保存位图文件时需要更新图像格式和尺寸,需要对程序 No.2_2_FreeImage 中对应参数作相关调整,打上如下 patch,内容如下:

+FREE_IMAGE_FORMAT g_format = (FREE_IMAGE_FORMAT)13;
+int g_width = 256, g_height = 256;

完整代码参见 No.1_OpenCLSampler

1.创建图像对象

缓冲区对象和图像对象都是内存对象,内存对象是对全局内存区域的引用。不同的是图像对象除了像素数据,还包含了对图像格式及图像属性的描述信息,例如图像宽度、高度,以及深度等。

创建了两个图像对象,分别用来存放原始图像数据和目标图像数据。图像对象和缓冲区对象类似,都是 cl_mem 类型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值