?? j2ktopnm.c
字號:
/* Copyright (c) 2001 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 pnm-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);
fread(src, 1, len, f);
fclose(f);
if (!j2k_decode(src, len, &img, &cp)) {
fprintf(stderr, "j2ktopnm: failed to decode image!\n");
return 1;
}
free(src);
if (img->numcomps==3 && img->comps[0].dx==img->comps[1].dx && img->comps[1].dx==img->comps[2].dx &&
img->comps[0].dy==img->comps[1].dy && img->comps[1].dy==img->comps[2].dy &&
img->comps[0].prec==img->comps[1].prec && img->comps[1].prec==img->comps[2].prec) {
f=fopen(argv[2], "wb");
w=ceildiv(img->x1-img->x0, img->comps[0].dx);
h=ceildiv(img->y1-img->y0, img->comps[0].dy);
max=(1<<img->comps[0].prec)-1;
fprintf(f, "P3\n%d %d\n%d\n", w, h, max);
for (i=0; i<w*h; i++) {
int r, g, b;
r=img->comps[0].data[i];
g=img->comps[1].data[i];
b=img->comps[2].data[i];
fprintf(f, "%d %d %d ", r, g, b);
}
close(f);
} else {
int compno;
for (compno=0; compno<img->numcomps; compno++) {
char name[256];
if (img->numcomps>1) {
sprintf(name, "%d.%s", compno, argv[2]);
} else {
sprintf(name, "%s", argv[2]);
}
f=fopen(name, "wb");
w=ceildiv(img->x1-img->x0, img->comps[compno].dx);
h=ceildiv(img->y1-img->y0, img->comps[compno].dy);
max=(1<<img->comps[compno].prec)-1;
fprintf(f, "P2\n%d %d\n%d\n", w, h, max);
for (i=0; i<w*h; i++) {
int l;
l=img->comps[compno].data[i];
fprintf(f, "%d ", l);
}
close(f);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -