开源库CImg 数据格式存储

摘要:
CImg是一个开源图像处理库,只有一个头文件,CImg H包含所有图像处理功能,操作简单,编程方便,但国内用户很少有主页:http://cimg.sourceforge.net/通常,Qimage在Windows的CImage或诺基亚的QT中存储的图像按每个像素的RGB顺序排列:例如,像素(0,0)(0,1)(0,2)存储在R1G1B1 R2G2B2 R3G的内存中

CImg为开源图像处理库,仅有一个头文件CImg.h便包含了对图像的所有处理函数,函数操作简单,编程方便,但国内使用者较少

其homepage:http://cimg.sourceforge.net/

通常windows的CImage 或nokia的QT中的Qimage 对图片的存储均为按照每个像素的RGB循序:

例如:像素点(0,0)(0,1)(0,2) 在内存中存储顺序为R1 G1 B1 R2 G2 B2 R3 G3 B3

但是CImg中的存储却不同像素点(0,0)(0,1)(0,2) 在内存中存储顺序为R1 R2 R3 G1 G2 G3 B1 B2 B3

开源库CImg 数据格式存储第1张

 

#include <iostream>
using namespace std;
#include "CImg.h"
using namespace cimg_library; 
#include <iomanip>
int main()
{
    CImg<unsigned char> image("car.bmp"); 
    int rgb_leng = image.width()*image.height();    
    unsigned char *ptr = image.data(0,0);
    unsigned char *ptest = new unsigned char[rgb_leng*3];
    int width = image.width();
    int height = image.height();
    for(int i=0;i<height;i++)
    {
        for(int j=0;j<width;j++)
        {
            ptest[i*width+j]=ptr[i*width+j];
            ptest[i*width+j+rgb_leng]=ptr[i*width+j+rgb_leng];
            ptest[i*width+j+rgb_leng*2]=ptr[i*width+j+rgb_leng*2];
        }        
    }
    
    
    CImg<unsigned char> imtest(ptest,width,height,1,3);
    cout<<"size of iamge"<<image.size()<<endl;
    cout<<"size of copy iamge"<<imtest.size()<<endl;
    imtest.save("test.bmp");
    image.display("test");    
    return 0;
}

由于CImg库刚刚看了一天,难免会误解其中含义,以上仅代表个人观点。

免责声明:文章转载自《开源库CImg 数据格式存储》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[zz]使用unity制作雨滴涟漪效果修改CENTOS 环境变量下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

rootkit:实现隐藏进程

实现隐藏进程一般有两个方法: 1,把要隐藏的进程PID设置为0,因为系统默认是不显示PID为0的进程。 2,修改系统调用sys_getdents()。 Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace ls 将列出命令ls用到的系统调用,从中可以发现ls是通过getdents系统调用...

位域简介

位域简介 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,可以在程序中按域名进行...

【C#】unsigned char类型

1、在C#中char是16位的;C++中的char是8位的。 unsigned char类型可以用byte类型代替。 2、 byte b = 1; byte b = Convert.ToByte(1);//这两种写法一样,相当于unsigned char=1 byte b = Convert.ToByte('1');//相当于unsigned char=...

SSL连接建立过程分析(6)

SSL连接建立过程分析(6)   本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn/ 2.15 SSL_write SSL结构(struct ssl_st)中的s2,s3指...

磁盘DMA过程分析

当我们在应用程序中编写write系统调用,向磁盘中写入数据时,写入请求会先调用底层写函数,将请求先写入内存中的页高速缓存(page cache)中,写入成功则立刻返回,真正的写入磁盘操作会延迟执行。Page cache是硬盘在内存中的一个缓存,是linux内核所使用的主要磁盘高速缓存,在绝大多数情况下,内核在读写磁盘时都引用page cache(极少数应用...

C51_单片机开发_XBYTE的使用

【实例】          百度结果:这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。         如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字 节时...