2012-10-24 6 views
2

며칠이 지난 후에이 문제를 포기하고 제출해야했습니다. 여기에 코드입니다 - 내가 기본적으로 어떻게하려고하는 것은 꽤 정직 :libjpeg로 I/O 일시 중지 모드로로드 된 이미지가 흐릿 해졌습니다.

switch (state) 
{ 
case INIT: 
     if (jpeg_read_header(&p_jpeg.info, true) == JPEG_SUSPENDED) 
     { 
      return SUSPEND; 
     } 
     if ( p_jpeg.info.jpeg_color_space == JCS_CMYK 
      || p_jpeg.info.jpeg_color_space == JCS_YCCK) return UNSUPPORTED; 

     p_jpeg.info.out_color_space = JCS_RGB; 
     p_jpeg.info.dct_method = JDCT_FLOAT; 
     p_jpeg.info.dither_mode = JDITHER_FS; 
     p_jpeg.info.do_fancy_upsampling = TRUE; 
     p_jpeg.info.enable_2pass_quant = FALSE; 
     p_jpeg.info.do_block_smoothing = TRUE; 
     jpeg_calc_output_dimensions(&p_jpeg.info); 
     int row_size = p_jpeg.info.output_width * p_jpeg.info.output_components; 
     p_jpeg.samples = (*p_jpeg.info.mem->alloc_sarray)((j_common_ptr) &p_jpeg.info, 
          JPOOL_IMAGE, 
          row_size, 1); 

     state = START; 
case START: 
     if (!jpeg_start_decompress(&p_jpeg.info)) 
     { 
      return SUSPEND; 
     } 
     state = WORK; 
case WORK: 
    JSAMPARRAY samples = p_jpeg.samples; 

    while (info->output_scanline < info->output_height) { 
     if (jpeg_read_scanlines(info, samples, 1) != 1) //one scanline only 
     { 
      return SUSPEND; // we need more data    
     } 
     //copy line to destination 
     char* line = (char*)samples[0]; 
     for (unsigned i = 0; i < info->output_width; ++i) 
     { 
      (*row).r = *line++; 
      (*row).g = *line++; 
      (*row).b = *line++; 
     } 
    } //end while 
    state = DONE; 
case DONE: 
     while (!jpeg_finish_decompress(&p_jpeg.info)) 
     { 
      return SUSPEND; 
     } 
     return SUCCESS; 
} //switch 

그리고 다양한 카메라와 모든 매력처럼 작동 다른 소스에서있는 모든 파일 - 이미지가 RGB 버퍼에로드되는 및 짜잔! 그러나 실제로 괴롭히는 것은 JPG 이미지가 나쁘게 왜곡되어로드 된 특정 JPG 이미지와 마주 친다는 사실입니다. 사용하는 libjpeg의 8d 배포본에 포함 된 JPGS의 예가 왜곡되어 나타납니다. 누군가 올바른 방향으로 나를 가르쳐 주시겠습니까? 위의 코드가 잘못된 것 같습니다.하지만 다시 한 번 강조해 봅시다. VERY 위의 코드가로드 된 참조 이미지의 첨부 된 예제를 보면 이미지가 심하게 왜곡됩니다.

도움 주셔서 감사합니다. libjpg 8D 분포

원본 이미지 파일 : 나는 Image distortion I am getting in this case with the code above

PS 위의 코드로이 경우에는 무엇입니까 Original image file from libjpg 8d distribution

이미지 왜곡 : 위의 코드는 에센셜 추출물 실제 코드 - 나는 어쨌든 무의미하다고 생각합니다.

답변

3

좋아, 마침내 해결할 수있었습니다. 문제는 이미지 디코딩 /로드 부분이 아니었지만이 작은 선이 누락 된 텍스처 생성 부분에있었습니다.

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);