libJPEG WinAPI 错误

libJPEG WinAPI Error

程序读取 JPEG 文件

void read_jpeg_file(char *szNamaFile)
{
    size_t i;
    unsigned char* raw_image;
    JSAMPROW row_pointer[1];
    unsigned long location = 0;

    struct jpeg_error_mgr jerr;
    struct jpeg_decompress_struct cinfo ;

    errno_t err;
    FILE *infile;
    err = fopen_s(&infile, szNamaFile, "rb" );

    if (infile == NULL )
    {
        printf("Error opening jpeg file %s\n!", szNamaFile );
        exit(EXIT_FAILURE);
    }
    cinfo.err = jpeg_std_error(&jerr);

    /* create decompressor */
    jpeg_create_decompress(&cinfo);

    /* this makes the library read from infile */
    jpeg_stdio_src(&cinfo, infile );

    /* read jpeg header */
    jpeg_read_header(&cinfo, TRUE);

    /* decompress */
    jpeg_start_decompress(&cinfo);

    /*allocate memory */
    raw_image = (unsigned char*)malloc( cinfo.output_width*cinfo.output_height*cinfo.num_components );

    /* now actually read the jpeg into the raw buffer */
    row_pointer[0] = (unsigned char *)malloc( cinfo.output_width*cinfo.num_components );
    /* read scanlines */
    while (cinfo.output_scanline < cinfo.output_height) {
        jpeg_read_scanlines( &cinfo, row_pointer, 1 );
        for(i = 0; i < cinfo.image_width*cinfo.num_components; i++) 
            raw_image[location++] = row_pointer[0][i];
    }  

    /* clean up */
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    fclose( infile );
    free( row_pointer[0] );
}

过程打开文件对话框

void OpenDialog(HWND hWnd) 
{
    OPENFILENAME    ofn     = {sizeof(ofn)};

    ofn.hwndOwner       = hWnd;
    ofn.lpstrFilter     = TEXT("File BMP (*.BMP)[=11=]*.BMP[=11=]File JPG (*.JPG)[=11=]*.JPG[=11=]");
    ofn.nFilterIndex    = 1;
    ofn.lpstrFile       = szNamaFile;
    ofn.lpstrFile[0]    = '[=11=]';
    ofn.lpstrTitle      = TEXT("Test ...");
    ofn.nMaxFile        = sizeof(szNamaFile);
    ofn.Flags           = OFN_FILEMUSTEXIST;

  if(GetOpenFileName(&ofn))
  {
      read_jpeg_file(ofn.lpstrFile);
  }
}

WM_COMMAND

case WM_COMMAND:
        if(HIWORD(wParam) != BN_CLICKED)
            break;
        switch(LOWORD(wParam))
        {
            case IDB_LOAD:
                OpenDialog(hWnd);
                break;
        }
        break;

图片不显示,如何解决?也许我应该给 WM_PAINT 发个消息?
对不起,如果我问了很多问题,,因为我还是一个初学者
谢谢你,抱歉我的英语不好

要修复第一个警告,请像这样使用 fopen_s

FILE *infile;
errno_t err = fopen_s(infile, szNamaFile, "rb");
if(0 == err)
{
    // Proceed with reading if file is opened properly
    ...
}

要修复第二个警告,请将 int 替换为 size_t:

size_t i;
for( i = 0; i < cinfo.image_width * cinfo.num_components; i++)