ref: f7e5af47f117be34669dc1e532d525dcbbff73f0
dir: /jp2.c/
#include <jasper/jasper.h>
#include <draw.h>
#include <memdraw.h>
static void
usage(void)
{
fprint(2, "usage: %s\n", argv0);
exits("usage");
}
void
main(int argc, char **argv)
{
jas_stream_t *s;
jas_image_t *im;
jas_cmprof_t *cp;
int c, i, w, h, x, y;
jas_image_cmpttype_t comps[] = {
JAS_IMAGE_CT_RGB_R,
JAS_IMAGE_CT_RGB_G,
JAS_IMAGE_CT_RGB_B,
};
u8int *rgb;
long *b;
Memimage *m;
ARGBEGIN{
default:
usage();
}ARGEND
if(argc != 0)
usage();
memimageinit();
jas_conf_clear();
jas_conf_set_max_mem_usage(512*1024*1024);
jas_init_library();
jas_init_thread();
if((cp = jas_cmprof_createfromclrspc(JAS_CLRSPC_SRGB)) == nil){
werrstr("failed to create color space");
goto error;
}
if((s = jas_stream_fdopen(0, "rb")) == nil){
werrstr("failed to open");
goto error;
}
if((im = jas_image_decode(s, -1, "")) == nil){
werrstr("failed to decode: %r");
goto error;
}
jas_stream_close(s);
if(jas_clrspc_isunknown(im->clrspc_)){
werrstr("unknown color space");
goto error;
}
if((im = jas_image_chclrspc(im, cp, JAS_CMXFORM_INTENT_PER)) == nil){
werrstr("failed to change color space");
goto error;
}
w = jas_image_width(im);
h = jas_image_height(im);
if((b = malloc(w*h*sizeof(*b))) == nil){
werrstr("memory");
goto error;
}
if((rgb = malloc(w*h*3)) == nil){
werrstr("memory");
goto error;
}
for(i = 0; i < nelem(comps); i++){
if((c = jas_image_getcmptbytype(im, comps[i])) < 0){
werrstr("failed to get component R");
goto error;
}
if(jas_image_readcmpt2(im, c, 0, 0, w, h, b) < 0){
werrstr("read component failed");
goto error;
}
for(y = 0; y < h; y++){
for(x = 0; x < w; x++)
rgb[3*(y*w + x) + 2-i] = b[y*w + x];
}
}
jas_image_destroy(im);
free(b);
if((m = allocmemimage(Rect(0,0,w,h), RGB24)) == nil){
werrstr("memory");
goto error;
}
loadmemimage(m, m->r, rgb, w*h*3);
writememimage(1, m);
freememimage(m);
exits(nil);
error:
fprint(2, "%r\n");
exits("error");
}