예제 #1
0
파일: image.c 프로젝트: younghang/Nimingban
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;
  }
}
예제 #2
0
파일: main.c 프로젝트: karolist/png_project
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;
}