void* decode(JNIEnv* env, InputStream* stream, bool partially, int* format) { unsigned char magic_numbers[2]; PatchHeadInputStream* patch_head_input_stream; *format = get_format(env, stream); switch (*format) { #ifdef IMAGE_SUPPORT_JPEG case IMAGE_FORMAT_JPEG: magic_numbers[0] = IMAGE_JPEG_MAGIC_NUMBER_0; magic_numbers[1] = IMAGE_JPEG_MAGIC_NUMBER_1; break; #endif #ifdef IMAGE_SUPPORT_PNG case IMAGE_FORMAT_PNG: magic_numbers[0] = IMAGE_PNG_MAGIC_NUMBER_0; magic_numbers[1] = IMAGE_PNG_MAGIC_NUMBER_1; break; #endif #ifdef IMAGE_SUPPORT_GIF case IMAGE_FORMAT_GIF: magic_numbers[0] = IMAGE_GIF_MAGIC_NUMBER_0; magic_numbers[1] = IMAGE_GIF_MAGIC_NUMBER_1; break; #endif default: LOGE(EMSG("Can't detect format %d"), *format); destroy_input_stream(get_env(), &stream); return NULL; } patch_head_input_stream = create_patch_head_input_stream(stream, magic_numbers, 2); if (patch_head_input_stream == NULL){ WTF_OM; destroy_input_stream(get_env(), &stream); return NULL; } switch (*format) { #ifdef IMAGE_SUPPORT_JPEG case IMAGE_FORMAT_JPEG: return JPEG_decode(env, patch_head_input_stream, partially); #endif #ifdef IMAGE_SUPPORT_PNG case IMAGE_FORMAT_PNG: return PNG_decode(env, patch_head_input_stream, partially); #endif #ifdef IMAGE_SUPPORT_GIF case IMAGE_FORMAT_GIF: return GIF_decode(env, patch_head_input_stream, partially); #endif default: LOGE(EMSG("Can't detect format %d"), *format); close_patch_head_input_stream(get_env(), patch_head_input_stream); destroy_patch_head_input_stream(get_env(), &patch_head_input_stream); return NULL; } }
int main(int argc, char **argv) { void *buff = NULL; int height, width, depth, colors; int ret; ret = PNG_decode("basn2c08.png", &buff, &height, &width, &depth, &colors); if(ret != 0){ printf("Decode error = %d\n", ret); return ret; } printf("decode complete\n"); printf("height = %d\nwidth = %d\ndepth = %d\n", height, width, depth); //print our image: img.height = height; img.bdepth = depth; img.width = width; img.color_ch = colors; int x_iter, y_iter=0; // for(y_iter = 0; y_iter<height; y_iter++){ for(x_iter = 0; x_iter<width; x_iter++){ printf("%x ", extract_pixel(buff, img, x_iter, y_iter)); } printf("\n"); // } // printf("\n"); display_raw(buff, height, width, depth, colors); return 0; }