社区
图形处理/算法
帖子详情
c语言环境BMP格式怎样换成png格式?!
jcreatorqijiashe
2009-02-04 09:03:49
是c语言环境!不是C++或者MFC环境! 论坛上的帖子都看过了,都是C++处理转换bmp到png的。 我看了libpng (
http://www.libpng.org/pub/png/libpng.html
) 这个库,但是调试这个环境很麻烦 一直没有弄好,有谁用过? 或者处理过从 BMP到PNG的转换!不用 GDI+!! 给个代码例子最好! 谢谢
...全文
384
5
打赏
收藏
c语言环境BMP格式怎样换成png格式?!
是c语言环境!不是C++或者MFC环境! 论坛上的帖子都看过了,都是C++处理转换bmp到png的。 我看了libpng (http://www.libpng.org/pub/png/libpng.html) 这个库,但是调试这个环境很麻烦 一直没有弄好,有谁用过? 或者处理过从 BMP到PNG的转换!不用 GDI+!! 给个代码例子最好! 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wsjtianyu
2009-02-11
打赏
举报
回复
CxImage类库,一个保存函数就能搞定
VirGhost
2009-02-10
打赏
举报
回复
//lpszPathName是路径字符串(即PNG文件)
FILE *fp = NULL;
char buf[PNG_BYTES_TO_CHECK];
LPSTR lpszFileName = lpszPathName;
if(!lpszFileName) return false;
//打开PNG文件
if(NULL == (fp = fopen(lpszFileName,"rb")))
{
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
//验证是否为PNG文件
if(fread(buf,1,PNG_BYTES_TO_CHECK,fp) != PNG_BYTES_TO_CHECK)
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
if( 0 != png_sig_cmp((unsigned char*)buf,(png_size_t)0,PNG_BYTES_TO_CHECK))
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
//以下代码读取PNG文件
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
unsigned int sig_read = PNG_BYTES_TO_CHECK;
int color_type = 0,interlace_type = 0;
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
if( NULL == png_ptr)
{
fclose(fp);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
info_ptr = png_create_info_struct(png_ptr);
if(NULL == info_ptr)
{
fclose(fp);
png_destroy_read_struct(&png_ptr,&info_ptr,png_infopp_NULL);
delete []lpszFileName;
lpszFileName = NULL;
return false;
}
png_init_io(png_ptr,fp);
png_set_sig_bytes(png_ptr,sig_read);
png_read_info(png_ptr,info_ptr);
if(info_ptr->bit_depth == 16)png_set_strip_16(png_ptr);
if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY && info_ptr->pixel_depth < 8)
png_set_gray_1_2_4_to_8(png_ptr);
switch (info_ptr->pixel_depth)
{
case 32:
if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);
png_set_invert_alpha(png_ptr);
//当为32位图像是应该如何处理,例如
//pDib->CreateDIB(info_ptr->width, info_ptr->height,32);
break;
case 24:
{
png_color_16 my_background={0,255,255,255,0};
png_set_background(png_ptr,&my_background,
PNG_BACKGROUND_GAMMA_SCREEN,0,1.0);
if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);
//当为32位图像是应该如何处理,例如
//pDib->CreateDIB(info_ptr->width, info_ptr->height,24);
}
break;
case 8:
case 4:
//当为32位图像是应该如何处理,例如
//if(info_ptr->num_palette>0)
//{
// DWORD *pRQ=new DWORD[info_ptr->num_palette];
// for(int i=0;i<info_ptr->num_palette;i++)
// {
// pRQ[i]=RGB(info_ptr->palette[i].red,info_ptr->palette[i].green,info_ptr->palette[i].blue);
// }
// pDib->CreateDIB(info_ptr->width, info_ptr->height,info_ptr->pixel_depth,pRQ,info_ptr->num_palette);
// delete[] pRQ;
//}
break;
default:
return false;
}
png_bytepp prow_pointers = new png_bytep[info_ptr->height];
UINT nRowBytes = png_get_rowbytes(png_ptr,info_ptr);
UINT row;
for(row=0;row<info_ptr->height;row++)
prow_pointers[row]=new BYTE[nRowBytes];
png_read_image(png_ptr,prow_pointers);
png_read_end(png_ptr,info_ptr);
//拷贝转换后的图像数据,以下是我自己的实现
for(row=0;row<info_ptr->height;row++)
memcpy(pDib->m_lpImage+(info_ptr->height-row-1)*pDib->m_nByteWidth,
prow_pointers[row],pDib->m_nByteWidth);
return TRUE;
jcreatorqijiashe
2009-02-06
打赏
举报
回复
[Quote=引用 2 楼 zooedward 的回复:]
你可以去看看FreeImage这个库。支持的格式很多,而且是开源的。
[/Quote]
这个我看了,库太大。我的问题是自己用c代码应该怎么转换?
zooedward
2009-02-05
打赏
举报
回复
你可以去看看FreeImage这个库。支持的格式很多,而且是开源的。
Soyokaze
2009-02-05
打赏
举报
回复
好像有个这样的库,貌似开源的,楼主可以搜一下,叫pnglib来着。
jpg转
bmp
c语言
linux,如何用
C语言
将图片由jpg转
换成
bmp
?
这篇博客介绍了如何使用
C语言
在Linux
环境
中将jpg
格式
的图片转换为
bmp
格式
。文章提供了转换的方法和相关代码示例,涉及到图像处理的基本操作。
C语言
基础项目:编写简易图像
格式
转换器预处理DeOldify输入
本文介绍使用
C语言
开发简易图像
格式
转换器,用于预处理DeOldify模型输入。重点涵盖
BMP
文件结构解析、像素数据读取与行对齐处理,并扩展支持
PNG
和JPEG
格式
(依赖lib
png
/libjpeg库)。项目输出统一RGB像素数组,支持文本与二进制两种
格式
,强化
C语言
文件I/O、内存管理及结构体应用能力。
Qwen3-VL-4B Pro入门必看:支持JPG/
PNG
/
BMP
多
格式
上传的视觉语言模型实战
本文详解Qwen3-VL-4B Pro视觉语言模型的本地化部署与实用技巧,涵盖JPG/
PNG
/
BMP
多
格式
直传、自然语言提问、多轮图文对话、OCR+推理融合能力及GPU
环境
一键启动。重点对比4B与2B版本在电商识图、教育图表解析、UI设计反馈三大场景的性能跃升,并提供Temperature/Max Tokens等核心参数调控策略与典型避坑指南。
终极指南:如何将图像文件快速转换为
C语言
数组?image_to_c工具的完整使用教程
image_to_c是一款轻量级命令行工具,支持
PNG
、JPEG、GIF、
BMP
、TIFF等10+种图像
格式
,可自动将图像文件转换为
C语言
兼容的uint8_t数组,并生成含尺寸、
格式
、位深度、帧数等信息的智能注释。它适用于嵌入式GUI、游戏开发和原型设计,提供--strip优化、构建系统集成及跨平台支持(Linux/macOS/Windows),显著提升图像数据嵌入效率与可维护性。
Linux下用xxd命令快速将图片转为
C语言
数组(附Win10子系统配置指南)
本文详细讲解如何利用Linux xxd命令将
PNG
、
BMP
等图像文件高效转换为
C语言
静态数组,涵盖xxd核心参数(-i、-c、-s、-l、-u)、WSL2
环境
下跨平台开发配置、ImageMagick预处理图像
格式
、与CMake构建系统自动化集成方法,以及在嵌入式图形界面(如STM32+SSD1306)中的实际部署与性能权衡。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章