最近又回到了选择图像库的老问题上,之前用过FreeImage,DevIL,libpng。

FreeImage的问题是他的Licence有点迷,双证书,除了GPL还有个自己的没读懂,不商用的话随便折腾,商业的话又不想麻烦读他的文档,我好懒......

DevIL用了UPX,呵呵!!直接Pass!!!

libpng用起来有点麻烦。

而最近看的许多开源似乎都在用stb_image这个库,基本单文件就能使用,例子也简单粗暴,Licence是public domain和MIT,MIT是啥玩意,逼乎如是说。

https://www.zhihu.com/question/25079718/answer/30025234

简单来说,看起来就是你只要带上人家的Licence,说明这是人家写的库你在用就行了。大家都Happy。

其他证书参考

http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

http://blog.csdn.net/chengkaizone/article/details/51504239

下载

https://github.com/nothings/stb

再来看例子,目前一般主流的图像格式也就是bmp,jpg,png,tga,dds,除了DDS一般是给DX用的,虽然一堆OpenGL程序也有用的,但是我一般只用png和tga,

png不用说了,带alpha通道,tga就是4通道信息,如果你想3通道存颜色,4通道不存透明而是别的什么信息,又有编辑器如Photoshop支持的,tga就用得着,而png虽然

也能存alpha,但是编辑器不支持Alpha单独编辑那种诡异玩法就不行了。然尔一般也就png。所以来吃狗!!!

简单的写个,读写png的例子,精简自自带例子,(0,0)是左上角像素

 #include <stdio.h>

 #define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h" #define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h" int main(int argc, char** argv)
{
int w, h, n; //rgba
//load image
unsigned char *data = stbi_load("rgba.png", &w, &h, &n, ); printf("%d, %d, %d\n", w, h, n); //change pixel //rgba,write 10 red pixel at line 11
for (int dx = ; dx < ; ++dx)
{
data[n * w * + dx * n + ] = ;
data[n * w * + dx * n + ] = ;
data[n * w * + dx * n + ] = ;
data[n * w * + dx * n + ] = ;
} //write image
stbi_write_png("write.png", w, h, n, data, w * n); stbi_image_free(data); return ;
}

效果读取一张图,并在第11行写入10像素红色,再保存到文件。

内存读取图像方法

void load_mem()
{
FILE* inFile = fopen("rgba.png", "rb"); fseek(inFile, 0, SEEK_END);
unsigned int bufSize = ftell(inFile);
fseek(inFile, 0, SEEK_SET); unsigned char* buf = new unsigned char[bufSize];
fread(buf, bufSize, 1, inFile); fclose(inFile); int w = 128;
int h = 128;
int n = 4; unsigned char *rgba = stbi_load_from_memory(buf, bufSize, &w, &h, &n, 0); stbi_write_png("test_from_memory.png", w, h, n, rgba, w * n); stbi_image_free(rgba); delete[] buf;
}

  

最新文章

  1. [cocos] ( 01 ) cocos2d-x 3.x 开发 环境配置
  2. CSS计数器
  3. 设计模式之Builder (创建者模式)的一些个人理解(转)
  4. flex布局滑动页面
  5. android studio 出错
  6. const 与 readonly 知多少
  7. Linux makefile教程之更新函数库文件十[转]
  8. MyEclipse中无法将SVN检出来的项目部署到tomcat中
  9. [King.yue]Ext中Grid得到选择行数据的方法总结
  10. 万科北京区域V-learn发布 系V-LINK产品系中首批产品
  11. easyui 很好很强大
  12. VS在Release模式下,难道还可以Debug?
  13. 在imge控件中直接显示图片(图片是byte[]格式)
  14. Win7如何添加局域网内的网络打印机
  15. opencv如何用模板匹配寻找目标
  16. 我的定时关机程序(MFC实现) .
  17. 难以理解的AQS(下)
  18. 说说Python中的闭包
  19. V4L2开发要点【转】
  20. 在VMware中安装Mac OS

热门文章

  1. 异步启动solidworks
  2. Kafka命令操作
  3. Cache基本原理之:结构
  4. 分布式之redis复习精讲
  5. activemq 无法消费! consumers are alive when the messages are stuck !
  6. (2) linux文件系统简介
  7. getColor问题
  8. mybatis的Selective接口和普通接口的区别
  9. react-native-pushy 热更新
  10. JEECG 上传插件升级-Online