📄 j2ktopgx.c
字号:
/* Copyright (c) 2002 David Janssens. All rights reserved. */
#include <j2k.h>
#include <stdio.h>
int ceildiv(int a, int b) {
return (a+b-1)/b;
}
int main(int argc, char **argv)
{
FILE *f;
unsigned char *src; //++pac
int len;
j2k_image_t *img;
j2k_cp_t *cp;
int w, h, max;
int i;
if (argc<3) {
fprintf(stderr, "usage: %s j2k-file pgx-file\n", argv[0]);
return 1;
}
f=fopen(argv[1], "rb");
if (!f) {
fprintf(stderr, "failed to open %s for reading\n", argv[1]);
return 1;
}
fseek(f, 0, SEEK_END);
len=ftell(f);
fseek(f, 0, SEEK_SET);
src=(unsigned char*)malloc(len); //++pac
fread(src, 1, len, f);
fclose(f);
if (!j2k_decode(src, len, &img, &cp)) {
fprintf(stderr, "j2ktopgx: failed to decode image!\n");
return 1;
}
free(src);
{
int compno;
for (compno=0; compno<img->numcomps; compno++) {
j2k_comp_t *comp=&img->comps[compno];
char name[256];
sprintf(name, "%s-%d.pgx", argv[2], compno);
f=fopen(name, "wb");
w=ceildiv(img->x1-img->x0, comp->dx);
h=ceildiv(img->y1-img->y0, comp->dy);
fprintf(f, "PG LM %c%d %d %d\n", comp->sgnd?'-':'+', comp->prec, w, h);
for (i=0; i<w*h; i++) {
int v=img->comps[compno].data[i];
if (comp->prec<=8) {
char c=(char)v;
fwrite(&c, 1, 1, f);
} else if (comp->prec<=16) {
short s=(short)v;
fwrite(&s, 2, 1, f);
} else {
fwrite(&v, 4, 1, f);
}
}
close(f);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -