📄 demo_encoder.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 + -