Cximage 库使用,直接读取图像数据到内存。
编译Cximage生成对应的Debug与Release版本,网上教程很多,不明白请留言。
这里需要GetBits()函数获得每一行图像数据的首像素的指针,不得不再次提醒的是,图像数据是从下到上,从左到右的方式扫描的。然后用GetEffWidth()函数获得图像的每行的stride长度,用来申请内存空间,注意:对于32位RGBA图像的储存方式,这个函数只是获得的RGB内存块的宽度,下面会详细介绍。同样的除了GetBits()这个函数可以获得图像数据指针之外,还有GetDIB()函数来直接获得图像数据指针。注意:图像数据指针指向左下角像素位置,所以图像数据是上下颠倒的。
首先
首先创建CxImage类对象读取图像,判断为真进入循环。
CxImage image;
image.Load(strFilePath,0);
if (image.IsValid())
{
int width = image.GetWidth();
int height = image.GetHeight();//获得宽高基本尺寸
int ColorType = image.GetColorType();//1 = indexed, 2 = RGB, 4 = RGBA, 获得颜色模型
int BytePerLine = image.GetEffWidth();
//(bitCount*width + 3)/ 4* 4;//4字节对齐
//int BytePerLine =((((image.GetBpp() * width) + 31) / 32) * 4);
/*两个宽度,一个是图像的宽度,例如201。另一个宽度是你的数据矩阵的宽 度,BytePerLine。这个值根据你的图像而定,如果你的图像是24位真彩, 201*3=603,这个数据不能被4整除,必须强制其等于604,这样你的数据矩阵 就是604*height。显示时的宽度还是你的201不变*/
BYTE* pDib = image.GetBits();
BYTE* buffer = new BYTE[height*BytePerLine];
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
buffer[j*BytePerLine+i*3] = *(pDib+(height-1- j)
*BytePerLine + i*3);
buffer[j*BytePerLine+i*3+1] = *(pDib+(height-1-j)
*BytePerLine + i*3+1);
buffer[j*BytePerLine+i*3+2] = *(pDib+(height-1-j)
*BytePerLine + i*3+2);
}
}
delete[] buffer;
}
或者直接用GetDIB()函数。
CxImage image;
image.Load(strFilePath,0);
if (image.IsValid())
{
int width = image.GetWidth();
int height = image.GetHeight();
int ColorType = image.GetColorType();
int BytePerLine = image.GetEffWidth();
BYTE* pDib = image.GetDIB();
BYTE* buffer = new BYTE[height*BytePerLine];
memset(buffer,0,height*BytePerLine);
memcpy(buffer,pdib,height*BytePerLine);
//特别注意:这里图像是倒像咬
}
delete[] buffer;
}
Cximage 库使用,直接读取图像数据到内存。相关推荐
- Kinect V1读取图像数据(For Windows)
Kinect V1读取图像数据(For Windows) 这篇博客 Kinect V1介绍 数据读取的基本流程 运行代码和注释 结尾 这篇博客 刚好有一台现成的Kinect V1相机,所以就拿过来学 ...
- python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...
- 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
文章目录 I . FFMPEG AVFrame 图像数据帧处理 前置操作 II . FFMPEG 解码 AVPacket 数据到 AVFrame 流程 III. FFMPEG 解码前后的图像格式 IV ...
- OpenGLES读写图像数据(内存与GPU)——使用PBO
一.什么是PBO 在 OpenGL 开发中,特别是在低端平台上处理高分辨率的图像时,图像数据在内存和显存之前拷贝往往会造成性能瓶颈,而利用 PBO 可以在一定程度上解决这个问题. PBO (Pixel ...
- python读取图像数据的一些方法
工作和学习中设计一个神经网络中经常需要设计一个数据载入器.首先第一件事我们要根据我们的任务要求确定一个数据提供的方法.如我们是一个分类任务,我们就需要读取数据和数据本身对应的标签. 1 ...
- TensorFlow中读取图像数据的三种方式(转)
附加一个链接关于DatasetAPI:https://zhuanlan.zhihu.com/p/30751039 本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和 ...
- MATLAB调用工业相机读取图像数据
前言 项目中需要读出网口通信的工业相机的图像数据,此文主要是记个笔记. 参考链接 1.在Windows上使用MATLAB Image Acquisition Toolbox 2.调用相机程序 3.ma ...
- opencv从内存缓冲区中读取图像数据
1.从内存中加载图像数据 s_Image_Info stDispImgInfo = spImgInfo->m_stDispInfo; //cv::_InputArray pic_arr(stDi ...
- C++_缓存相机图像数据到内存
相机原始输出的图像数据是Byer格式,可以塞进内存中的图像数组 unsigned char* imgData[150] ;//创建图像数据数组//初始化时申请缓存150张图像的内存空间 for (in ...
- Python 分通道读取图像数据,取经之路第 4 天
今天是持续写作的第 36 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 今天这 1 个小时,继续给大家打来 Python 读取图片这一简单的操作. 读取单通道 使用 OpenCV ...
最新文章
- LSM 优化系列(四) -- Rocksdb和Lethe 对Delete问题的优化
- Python使用tsne进行高维数据可视化实战:二维可视化、三维可视化
- 如何查看经过iOS优化的PNG图片
- java学习记录--ThreadLocal使用案例
- 蓝桥杯java第八届第二题--纸牌三角形
- 需求分析阶段各种图的功能
- 枚举类型 实现一个enumeration对于类的加工的函数
- 如何避免文件被删无法找回的尴尬?
- redis---中文文档
- python内存地址替换原理(20秒读懂)
- JavaScript 开闭原则OCP
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!...
- 利用classloader同一个项目中加载另一个同名的类_你知道 Java 类是如何被加载的吗?...
- 求大佬解决0x00881340 处有未经处理的异常(在 ConsoleApplication1.exe 中): 0xC0000005: 写入位置 0x00993B8C 时发生访问冲突。
- java storedmap_SCJP模拟题
- Gilbreath原理中的数学与魔术(一)——Gilbreath Shuffle First Principle
- 计算机基础a3知识点,《计算机应用基础》期末试卷A(A3版).doc
- 网络训练时使用不同学习率策略(Poly)以及学习率是如何计算
- 云和恩墨大讲堂 | 基于PCIE 闪存卡的 Oracle 数据库使用
- 今天教你5种爆款标题,自媒体短视频标题写得好,月入过万少不了