2

数日後、私はあきらめてこの質問を提出しなければなりませんでした。私がやろうとしていることは基本的にかなり簡単です-ここにコードがあります:

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画像に遭遇したという事実です-さらに悪いことに-私が使用しているlibjpegの8dディストリビューションに含まれているJPGSの例も歪んでいます-これはおそらく私が何か間違ったことをしていることを意味します。誰かが私を正しい方向に向けてもらえますか?上記のコードの何が問題になっていますか?ただし、非常にまれなケースで、画像がひどく歪んでいることを強調しておきます上記のコードがロードされた参照画像の添付の例を見てください)。

助けてくれてありがとう!

libjpg 8dディストリビューションの元の画像ファイル: libjpg8dディストリビューションの元の画像ファイル

この場合、上記のコードで画像の歪みが発生します この場合、上記のコードで画像の歪みが発生します

PS:上記のコードは、実際のコードからの本質的な抽出です-とにかく無関係だと思います。

4

1 に答える 1

3

わかりました、私はついにそれを解決することができました。問題は、画像のデコード/読み込みの部分ではなく、この小さな線が欠落しているテクスチャ生成の部分にありました:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
于 2012-10-24T18:50:00.570 に答える