bmp图片压缩 C程序

银林未来 2015-07-13 06:02:11
需求:需要将 24位的 bmp 图片 分辨率 320X175 转成 1K以内的 bmp图片 或是 jpg图片

目前,我的LCD 分辨率为 320X240,截取 320X175 为 签名空白处, 保存的bmp签名图片大小 为 3*320*175 字节
转成 单色后 变成了 7k 不到,或是 直接 转换成 JPG 图片,也不到 10K,但是 离我的 1K 需求 还是 太大,


求能 让我的 图片变小的 C 接口 ,谢谢。如果有的话,请发我邮箱,543701603@qq.com。谢谢大家。
...全文
472 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
jpg压缩率满足不了你的需求的话,可以看看国外比较新的图像压缩方法,比如这个BPG压缩,相关主页http://bellard.org/bpg/
BeanJoy 2015-07-27
  • 打赏
  • 举报
回复
jpg就是经过压缩的了,再压缩也不会小很多。 劝楼主还是不要考虑其他压缩算法了,还是考虑下合理性。
赵4老师 2015-07-27
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
为什么不使用软件Image Optimizer呢?
刚用Image Optimizer压缩到2K刚刚能看;压缩到1K真不能看了。
Sandrer 2015-07-25
  • 打赏
  • 举报
回复
这是没可能的事情, 楼主别费精力了~~~~~ 就算你的图片是8bit, 320*170/4 都已经超过1k了, 还不包括文件头信息 而且除非你的图片的颜色有很多重复, 否则你再压缩也不可能压缩到1k以内
汪宁宇 2015-07-25
  • 打赏
  • 举报
回复
引用 5 楼 relaxisland 的回复:
为啥要1k,以及可接受的标准是什么? 大小可以缩小吗? 图片的模糊程度可以到 哪里? 压缩成jpg可以设置压缩倍率的。
整片FLASH可能还不到16K........
汪宁宇 2015-07-25
  • 打赏
  • 举报
回复
引用 楼主 nielinyin 的回复:
需求:需要将 24位的 bmp 图片 分辨率 320X175 转成 1K以内的 bmp图片 或是 jpg图片 目前,我的LCD 分辨率为 320X240,截取 320X175 为 签名空白处, 保存的bmp签名图片大小 为 3*320*175 字节 转成 单色后 变成了 7k 不到,或是 直接 转换成 JPG 图片,也不到 10K,但是 离我的 1K 需求 还是 太大, 求能 让我的 图片变小的 C 接口 ,谢谢。如果有的话,请发我邮箱,543701603@qq.com。谢谢大家。
rar/zip这些明显不适合移植,jpg你得考虑清楚啊,过度色极容易丢失,自己随便写个简单算法压缩一下就行了呀 可以参考下这个:http://blog.csdn.net/chenyujing1234/article/details/8049325
汪宁宇 2015-07-25
  • 打赏
  • 举报
回复
引用 楼主 nielinyin 的回复:
需求:需要将 24位的 bmp 图片 分辨率 320X175 转成 1K以内的 bmp图片 或是 jpg图片 目前,我的LCD 分辨率为 320X240,截取 320X175 为 签名空白处, 保存的bmp签名图片大小 为 3*320*175 字节 转成 单色后 变成了 7k 不到,或是 直接 转换成 JPG 图片,也不到 10K,但是 离我的 1K 需求 还是 太大, 求能 让我的 图片变小的 C 接口 ,谢谢。如果有的话,请发我邮箱,543701603@qq.com。谢谢大家。
看来是准备要做文本屏的兄弟啊
relaxisland 2015-07-19
  • 打赏
  • 举报
回复
为啥要1k,以及可接受的标准是什么? 大小可以缩小吗? 图片的模糊程度可以到 哪里? 压缩成jpg可以设置压缩倍率的。
shiter 2015-07-15
  • 打赏
  • 举报
回复
那可以直接用差值算法么,我觉的直接往小搞搞,完后再考虑编码
schlafenhamster 2015-07-14
  • 打赏
  • 举报
回复
"24位的 bmp 图片" 先转换为 8位的 BMP
赵4老师 2015-07-14
  • 打赏
  • 举报
回复
为什么不使用软件Image Optimizer呢?
xf_21 2015-07-13
  • 打赏
  • 举报
回复
这个不一定有吧,每种压缩算法都有个范围,不能你想压多小就多小。另外,与你图片中色彩的丰富程度也有关系。信息含量越多压缩后文件越大。
VC++ JPEG与BMP图像互转。 JPG图形库只有14个函数,他们都是非常有用的: 1. void init_jpeg() <---jpgdll中的函数 1. void init_jpeg1() <--jpegdll中的函数 本函数初始化JPEG API动态链接库,它必须在其它JPEG API函数之前调用。在程序中此函数只须调用一次。 函数调用语句样例: init_jpeg(); . 2. void findwindow(char *title) 1. void findwindow1(char *title) 本函数取程序窗口的图形句柄,用于其它函数绘图处理。 Title为程序窗口的标题,若标题很长,取前几个字就可以了。 函数调用语句样例: hl=findwindow("JPEG TEST"); . 3. long showjpg(char *fliename, long hwnd, long left, long top) 2. long showjpg1(char *fliename, long hwnd, long left, long top) 本函数打开一个JPG图形文件,并在窗口的(left,top)位置显示。 hwnd为窗口图形句柄,(left,top)为图形显示的左上角位置。 函数调用语句样例: rs=showjpg("c:\jpgdemo\demo.jpg",hwnd,10,10) .. 4. long show_bmp(char *fliename, long hwnd, long left, long top) 3. long show_bmp1(char *fliename, long hwnd, long left, long top) 本函数打开一个BMP图形文件,并在窗口的(left,top)位置显示。 hwnd为窗口图形句柄,(left,top)为图形显示的左上角位置。 函数调用语句样例: rs=showbmp("c:\jpgdemo\demo.bmp",hwnd,10,10) . 5. long jpg_to_bmp(char *jpgfilename, char *bmpfilename) 5. long jpg_to_bmp1(char *jpgfilename, char *bmpfilename) 本函数将一个JPG图形文件转换为BMP图形文件。 函数调用语句样例: rs=jpg_to_bmp("c:\jpgdemo\demo.jpg","c:\temp\demo.bmp") . 6. long bmp_to_jpg(char *jpgfilename, char *bmpfilename,long quality) 5. long bmp_to_jpg1(char *jpgfilename, char *bmpfilename,long quality) 本函数将一个BMP图形文件转换为JPG图形文件。 Quality为转换的质量和图形压缩情况,取值0-100。一般取75。 函数调用语句样例: rs=bmp_to_jpg("c:\jpgdemo\demo.bmp","c:\temp\demo.jpg",75) . 7. long copy_to_bmp(long hwnd, char *bmpfilename, long type) 6. long copy_to_bmp1(long hwnd, char *bmpfilename, long type) 本函数将程序窗口内容硬拷贝到一个BMP图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 函数调用语句样例: rs=copy_to_bmp("c:\temp\demo.bmp",hwnd,0) . 8. long copy_to_jpeg(long hwnd, char *bmpfilename, long type,long quality) 7. long copy_to_jpeg1(long hwnd, char *bmpfilename, long type,long quality) 本函数将程序窗口内容硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 quality为图形质量,取值0-100。一般取75。 函数调用语句样例: rs=copy_to_jpeg("c:\temp\demo.jpeg",hwnd,0,75) . 9. long to_clip(long hwnd, long type) 8. long to_clip1(long hwnd, long type) 本函数将程序窗口内容硬拷贝到剪贴板,你可以用"Paste"方式在其它图形软件中编辑。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 函数调用语句样例: rs=to_clip(hwnd,0) . 10. long clip_to_jpeg(char *name,long hl,long quality) 10 long clip_to_jpeg1(char *name,long hl,long quality) 本函数将当前剪贴板上的图形硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 quality为图形质量,取值0-100。一般取75。 函数调用语句样例: rs=clip_to_jpeg("bird2.jpg",hWnd,75); . 11. long clip_to_bmp(char *name,long hl) 11. long clip_to_bmp1(char *name,long hl) 本函数将当前剪贴板上的图形硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, 函数调用语句样例: rs=clip_to_bmp("bird2.bmp",hWnd,75); . 12. void Area_Copy(long hl,long left,long top,long w,long h) 12. void Area_Copy1(long hl,long left,long top,long w,long h) 本函数将程序窗口上的一个区域的内容硬拷贝到剪贴板,你可以用"Paste"方式在其它图形软件中编辑。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 函数调用语句样例:Area_Copy(hWnd,0,0,300,400); . 13. long Area_to_jpeg(long hl,long left,long top,long w,long h,char * name,long qa) 13.long Area_to_jpeg1(long hl,long left,long top,long w,long h,char * name,long qa) 本函数将程序窗口上的一个区域的内容硬拷贝到JPG图形文件。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 quality为图形质量,取值0-100。一般取75。 函数调用语句样例:Area_to_jpeg(hWnd,0,0,300,400,"bird3.jpg",75); . 14. long Area_to_bmp(long hl,long left,long top,long w,long h,char * name) 14. long Area_to_bmp1(long hl,long left,long top,long w,long h,char * name) 本函数将程序窗口上的一个区域的内容硬拷贝到BMP图形文件。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 函数调用语句样例:Area_to_bmp(hWnd,0,0,300,400,"bird3.bmp");

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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