示例#1
0
文件: jp2.c 项目: 151706061/Gdcm
int jp2_decode(unsigned char *src, int len, jp2_struct_t * jp2_struct,
	       j2k_cp_t * cp)
{
  cio_init(src, len);

  if (jp2_read_jp())
    return 1;
  if (jp2_read_ftyp(jp2_struct))
    return 1;
  if (jp2_read_jp2h(jp2_struct))
    return 1;
  if (jp2_read_jp2c(src, len, jp2_struct, cp))
    return 1;
  return 0;
}
示例#2
0
int jp2_write_jp2c(j2k_image_t * img, j2k_cp_t * cp, char *jp2_buffer,
		   char *index)
{
  int len, i, set;
  char *cstr, *out;
  jp2_box_t box;

  box.init_pos = cio_tell();
  cio_skip(4);
  cio_write(JP2_JP2C, 4);	// JP2C
  if (jpwl_cp.JPWL_on){
	set=cio_tell();
	cstr = (char *) malloc( cp->tdx * cp->tdy * cp->tw * cp->th * 10*sizeof(char)); /* Allocate memory for all tiles */
    cio_init(cstr, cp->tdx * cp->tdy * cp->tw * cp->th * 10);							 
    len = j2k_encode(img, cp, cstr, cp->tdx * cp->tdy * cp->tw * cp->th * 10, index); 
    if (len == 0) {
		fprintf(stderr, "failed to encode image\n");
	return 1;
    }
	out= (char *) malloc(len*6*sizeof(char));
	len=jpwl_encode(cstr,out,len);
	if (len == 0) {
		fprintf(stderr, "failed to encode image\n");
		return 1;
	}
	//ricopio la codestream, sono nel buffer out
	cio_seek(0);
	for(i=0;i<len;i++)
		jp2_buffer[set+i]=cio_read(1);
	//mi rimetto nel buffer jp2_buffer
	cio_init(jp2_buffer, cp->tdx * cp->tdy * cp->tw * cp->th * 10);
	//aggiorno la lunghezza della codestream
	len += set;
	cio_seek(len);
	//correggo l'index file e lo scrivo
	if (info_IM.index_on){
		info_IM.Main_head_end += set;
		//printf("fine_mh: %d\n",info_IM.Main_head_end);
		//printf("%d\n", info_IM.tile[0].start_pos);
		info_IM.tile[0].start_pos += set;
		for (i=0; i < cp->th * cp->tw; i++){
			info_IM.tile[i].end_header += set;
			info_IM.tile[i].end_pos += set;
			if (i <  cp->tw * cp->th)
				info_IM.tile[i+1].start_pos += set;
			pack_corr(set, i);
		} 
	}
    if (cp->index_on && use_index){
		write_index(index, len);
	}
	free(cstr);
	free(out);
  }
  else{
	len = j2k_encode(img, cp, jp2_buffer, cp->tdx * cp->tdy * cp->th * cp->tw * 2, index);
  }
  box.length = cio_tell() - box.init_pos;
  cio_seek(box.init_pos);
  cio_write(box.length, 4);	/*    L       */
  cio_seek(box.init_pos + box.length);
  return box.length;
}