⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_encoder.c

📁 自适应算术编解码
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include "ac.h"
#include "bmp.h"
#define check(b,m) \
do {\
if (b){\
printf(stderr, m);\
exit(1);\
}\
} while(0)

#define ADAPT 1
#define NSYM 256
// fp --> ace
int main(int argc, char* argv[])
{
	FILE *fp;
	int c;
	unsigned short identifier;
	ac_encoder ace;
	ac_model acm;
	Header *header;
	Info *info;

	check(argc < 3, "usage : with argument srcfilename dstfilename");
	ac_encoder_init(&ace, argv[2]);
	ac_model_init(&acm, NSYM, NULL, ADAPT);

	fp = fopen(argv[1], "rb");
	check(!fp, "could not open source file");

	fread((void*)&identifier, 2, 1, fp); // read identifier
	check(identifier != 0x4D42, "please give me a bmp file!");

	header = (Header*)malloc(sizeof(Header)); // read header
	fread((void*)header, sizeof(Header), 1, fp);
	check(header->bits != 8, "please give me a 8 bit bmp file!");

	info = (Info*)malloc(sizeof(Info)); //read info
	fread((void*)info, sizeof(Info), 1, fp);
	info->compression |= 8;

	fwrite((void*)&identifier, 2, 1, ace.fp); // write identifier
	fwrite((void*)header, sizeof(Header), 1, ace.fp); // write header
	fwrite((void*)info, sizeof(Info), 1, ace.fp); // write info
	header->offset -= (sizeof(Header) + sizeof(Info)); // write left
	while(header->offset > 0) {
		fputc(fgetc(fp), ace.fp);
		(header->offset)--;
	}

	// encode
	c = fgetc(fp);
	while (c != EOF) {
		ac_encode_symbol(&ace, &acm, c);
		c = fgetc(fp);
	}
	printf("bits for encoder : %d\n", (int)ac_encoder_bits(&ace));

	ac_encoder_done(&ace);
	ac_model_done(&acm);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -