一、简介
photoshop专有的图像格式PSD文件是一个由多张,多层图像数据叠加的图像数据。网上只有读取整幅图片数据的使用,并且是英文文档,资料不是很全,中文资料更是为0,,通过使用libpsd库,拉斐尔在源码中相关多层图像数据混合操作中发现layer_records图像层结构体指针,以及image_data图像数据指针,通过这些参数可以直接读取或者拷贝图像数据到你自己的内存pbuffer中。有意思的是,任何网站对libpsd库的介绍只是这一句:libpsd库是 C语言用来解析 PSD 文件的开发包。更别说libpsd 库的编译了。不过发现编译并不是很难。
libpsd库
下载地址:https://github.com/freeman1974/libpsdZlib库是zlib是提供数据压缩用的函式库,最初是为libpng函式库所写的,后来普遍为许多软件所使用。是编译libpsd库的前提。
下载地址:http://www.zlib.net/
二、静态库编译
编译zlib静态链接库(Debug/Release版本):
1、新建一个win32 控制台程序,命名为zlib,预编译头文件为空。
2、配置属性(configuration type)设置Static library (.lib)。
3、添加zlib文件夹下的所有 .c与.h 文件。
4、编译生成zlib.lib文件。
编译libpsd静态链接库(Debug/Release版本):
方法与zlib类似。
提示: zlib库先编译,libpsd 库编译需要zlib.lib文件。
test:
部分代码:
新建win32控制台程序。包含头文件 #include "../libpsd/libpsd.h"
首先定义结构体指针:
psd_context * context = NULL; // 存放所有psd图像信息
psd_status status; // bool型
psd_layer_record* layerRecord; // 层图像结构体指针
status = psd_image_load_layer(&context, pFilepath); // 默认读取所有层信息与图像数据
layerRecord = context->layer_records; // 第0层的结构指针
layerRecord += 1;// 第1层的结构指针
// layerRecord->top 基本信息
// layerRecord->left
// layerRecord->bottom
// layerRecord->right
// layerRecord->image_data 指定层的图像数据指针
int buffersize = layerRecord->height* (layerRecord->weidth*3+3)/4*4);
BYTE* buffer = new BYTE[buffersize];
memcpy(buffer,layerRecord->image_data,buffersize);
///你的代码///
delete[] buffer;
psd_image_free(context);
//最后释放结构体指针。
拉斐尔提示:有什么问题可留言。