linux下怎么解码png图片?用libpng库?用cximage库?这些类库都可以跨平台移植?

xqhrs232 2011-04-13 05:34:41
linux下怎么解码png图片?用libpng库?用cximage库?这些类库都可以跨平台移植?
...全文
523 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqhrs232 2011-04-14
  • 打赏
  • 举报
回复
UBUNTU系统中可以搜索到zlib.so++++libpng.so这两个库文件的!!!

zlib.h也有!!!
xqhrs232 2011-04-14
  • 打赏
  • 举报
回复
linux下用来做UI的工具----QT/GTK都已经自带了这个LIBPNG库,应该就不需要移植了。直接包含对应头文件去调对应函数应该就可以了。
xqhrs232 2011-04-13
  • 打赏
  • 举报
回复
帮帮忙阿, 交叉编译miniGUI的libpng库出现一个问题。

http://tieba.baidu.com/f?kz=601495562
qthsrs232 2011-04-13
  • 打赏
  • 举报
回复
linux php 所支持的安装文件:libpng
http://download.csdn.net/source/1443117/

libpng源码下载地址
http://www.libpng.org/pub/png/libpng.html

qthsrs232 2011-04-13
  • 打赏
  • 举报
回复
十全大补:CxImage图像处理类库

http://www.lupaworld.com/article-121918-1.html
qthsrs232 2011-04-13
  • 打赏
  • 举报
回复
教你如何使用libpng显示png图片
http://blog.163.com/seven_7_one/blog/static/16260641220110103314261/


libpng是一个跨平台的png解码库,方便易用。我这里不说它怎么移植,基本上如果是支持fopen之类函数的平台都可以支持。其实他的移植非常简单,zlib可能麻烦一点,但相信一般人都能搞定。主要是文件读写和错误处理的试配。

这里只提供一个使用libpng得到文件RGB(A)数据的例子,没加任何的错误处理:

void readpng__001(char* name)

{

// 前边几句是扯淡,初始化各种结构

FILE* file = fopen(name, "rb");

png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);

png_infop info_ptr = png_create_info_struct(png_ptr);

setjmp(png_jmpbuf(png_ptr));

// 这句很重要

png_init_io(png_ptr, file);

// 读文件了

png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_EXPAND, 0);

// 得到文件的宽高色深

int m_width = png_get_image_width(PngPtr, InfoPtr);
int m_height = png_get_image_height(PngPtr, InfoPtr);

int color_type = png_get_color_type(PngPtr, InfoPtr);

// 申请个内存玩玩,这里用的是c++语法,甭想再c上编过

int size = m_height * m_width * 4;

unsigned char* bgra = new unsigned char[size];

int pos = 0;

// row_pointers里边就是传说中的rgba数据了

png_bytep* row_pointers = png_get_rows(PngPtr, InfoPtr);

// 拷贝!!注意,如果你读取的png没有A通道,就要3位3位的读。还有就是注意字节对其的问题,最简单的就是别用不能被4整除的宽度就行了。读过你实在想用,就要在这里加上相关的对齐处理。

for(int i = 0; i < m_height; i++)
{
for(int j = 0; j < (4 * m_width); j += 4)
{
bgra[pos++] = row_pointers[i][j + 2]; // blue
bgra[pos++] = row_pointers[i][j + 1]; // green
bgra[pos++] = row_pointers[i][j]; // red
bgra[pos++] = row_pointers[i][j + 3]; // alpha
}
}

// 好了,你可以用这个数据作任何的事情了。。。把它显示出来或者打印出来都行。

png_destroy_read_struct(&png_ptr, &info_ptr, 0);

fclose(file);

return;

}



xqhrs232 2011-04-13
  • 打赏
  • 举报
回复
如何在Linux下缩放显示PNG图片
http://topic.csdn.net/t/20060530/09/4787713.html
xqhrs232 2011-04-13
  • 打赏
  • 举报
回复
哪位大牛知道怎么用libpng解码png文件并显示出来
http://topic.csdn.net/u/20070808/15/38DF3A56-4FAC-4A3A-9357-3C563E1A1399.html

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧