#include <jasper/jasper.h>#include <draw.h>#include <memdraw.h> static voidusage(void){ fprint(2, "usage: %s\n", argv0); exits("usage");} voidmain(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");}
#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");
}