我现在用C++/C语言写了一个Bmp图象的程序
现在想把这个程序进行无损压缩,就是把压缩的部分写在
我的这个程序里面
请大家帮帮忙
怎么写这个无损压缩的函数啊
27 个解决方案
我只知道哈夫曼编码可以进行无损压缩。
o(∩_∩)o...
JPEG-2000可以搞无损压缩,不过难度比较大
简单的方法可以直接用算术编码进行压缩,不过没有进行小波变换和量化过程,效果肯定不明显
只要Bmp的,
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef unsigned char BYTE;
typedef unsigned long DWORD;
typedef unsigned short WORD;
#include <pshpack2.h>
typedef struct {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BMPFILEHEADER_T;
struct BMPFILEHEADER_S{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
};
typedef struct{
DWORD biSize;
DWORD biWidth;
DWORD biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
DWORD biXPelsPerMeter;
DWORD biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BMPINFOHEADER_T;
unsigned char array[8]={0,0,0,0,0xff,0xff,0xff,0};
void Snapshot( BYTE * pData, char * filename )
{
int width=320;
int height=240;
int size = width*height/8;
BMPFILEHEADER_T bfh;
bfh.bfType = 0x4d42;
bfh.bfSize = size + sizeof( BMPFILEHEADER_T ) + sizeof( BMPINFOHEADER_T )+8;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits = bfh.bfSize - size;
BMPINFOHEADER_T bih;
bih.biSize = sizeof(BMPINFOHEADER_T);
bih.biWidth = width;
bih.biHeight = height;
bih.biPlanes = 1;
bih.biBitCount =1;
bih.biCompression = 0; /*******************/
bih.biSizeImage = size;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
FILE * fp = fopen( filename,"wb");
if( !fp ) return;
fwrite( &bfh, 1, sizeof(BMPFILEHEADER_T), fp);
fwrite( &bih, 1, sizeof(BMPINFOHEADER_T), fp);
fwrite( array, 1, 8,fp);
fwrite( pData, 1, size, fp );
fclose( fp );
}
void main()
{
unsigned char pRGB[320*240/8];
FILE * fpf = fopen("keyima.bin","rb");
if (!fpf) return;
fread(pRGB,1,9600,fpf);
Snapshot((BYTE* )pRGB,"C:\\test.bmp" );
}
上面的程序
哪位大哥能帮我写个rle无损压缩的函数,把上面的位图压缩小点
急求谢谢了,分不够的话可以追加,急要这个压缩函数,帮帮忙啊大哥大姐们!
我可以给你提供一个思路
最简单的办法,用行程编码进行编码,然后再用自己设计的解码器来看这张图片(也就是说,经你压缩的图片用别的浏览器是看不出来的)。
首先吧BMP的文件头解析出来,可以参看BMP的文件协议,从你的代码来看,你对BMP的文件结构已经很了解了。
其实BMP的文件协议很简单的。
然后定义自己的文件头,包含类似于以下的信息:版本号,文件尺度,压缩标记等等。
我感觉,最重要的就是协议的制定,协议作好以后,代码都是小问题。
我上面的那个程序只能输出个bmp图片,自己设计个解码器是在重新定义一个bmp文件结构吗,把压缩后的文件再重新输出来?
bmp的头文件需要压缩吗?
各位高手帮忙啊!
bmp的文件头我上面有过定义啊,压缩后还得怎么定义啊?
再有一个问题就是无损压缩代码怎么实现啊?
6楼的那位大哥你帮帮我好吗?我被这件事情捆饶了很久,没人帮我了
你帮我解决一下好吗?
无损图像还是有不少的,不过你这么急,直接用zip好了,有源码。这种方法最简单,只不过压缩后不是图像了,其他看图软件打不开。
不知道你说的头文件压缩是什么意思
我的意思是说,如果你想作自己的图像协议的话,头文件你完全可以自己定义,头文件没有压缩的必要,头文件只记录一些参数性质的信息,没有多大的,最多1K吧,没有必要压缩的。
图像部分,你可以先分析BMP的文件中每个像素的信息是如何组织的,然后用自己定义的压缩算法来对这些像素进行编码,存入自己的图像文件中。
关于压缩算法,最简单的就是形成编码,就是把连续相同的像素表示成 :
像素值 重复次数的形式进行存储。
没太明白lz的意思
如果你是想压缩整张图片,直接对bmp压缩就好了,算法可以用zip
如果你是只想压缩图片的数据,那就把数据分出来压缩,bmp头单独保存
如果头文件不压缩的话,光是把数据压缩了,那么压缩后的数据放在压缩前的头上,也显示不出来图片啊!
我的意思很简单就是自己写一个bmp图象(别的颜色不要,就是黑白的),然后把这个图象无损压缩了;压缩和写
图象的代码自己写,就这是样一个程序!上面发的程序只是把图象显示出来了,没有压缩,无损压缩我不会了,
现在就是想,谁能帮我把这个无损压缩给写出来!求求大家了!急想知道是个怎么样的一个过程!希望大家帮我实现一下
http://www.libpng.org/
png 格式是无损的
朋友们帮帮忙,压缩的头文件该怎么定义
看看上面的程序和要求
帮忙解决一下吧
又捆饶一个星期了
http://topic.csdn.net/u/20080829/12/d8ec6109-5a67-402a-827c-99c67a38e2a5.html
里面的回帖里看俺贴的代码!(rle)
http://download.csdn.net/source/400904 (lzw)
现在我想知道
压缩后的bmp的头文件该怎么去定义啊
越来越不清晰了我
BI_RLE4的编码方式:由2个字节组成,第一个字节指定像素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。第一个像素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,依此类推。
就用这个算法,谁能帮我举出个列子.
BI_RLE4算法:
比如:00 00 00 00 00 06 07 08 09 00 04 45 34 23 45 08 09 09 00 05 05 05 05 05 00 01
这样的一串数据,用BI_RLE4的编码方式算法压缩
压缩后的结果是什么:?