LIBTIFF读取tiff文件时,打印buf出错

2023-05-16

如图所示,按照官网提供的例程读取tiff文件,并打印读取的值时,提示:

 Subscript of pointer to incomplete type 'void'

代码如下:

    //---打开tiff文件的测试
    
    
    TIFF* tif = TIFFOpen("a.tif", "r");
    if(tif){
        uint32 imageLength;
        tsize_t scanline;
//        unsigned char* buf;
        tdata_t* buf;
        uint32 row;
        uint32 col;
        
        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageLength);
        scanline = TIFFScanlineSize(tif);
//        buf = (unsigned char *)_TIFFmalloc(scanline);
        buf = (tdata_t*)_TIFFmalloc(scanline);
        printf("Scanlinesize = %zu", scanline);// %zu用来打印tsize_t
        for(row=0;row <imageLength;row++){
            TIFFReadScanline(tif, buf, row);
            for(col=0;col<scanline;col++){
                printf("buf[%d][%d]=%d", row,col,buf[col]);
//                printf("%d", buf[col]);//报错:Subscript of pointer to incomplete type 'void'
                                        //解决方法,将buf的类型由tdata_t改成unsigned char*
            printf("\n");
            }
        }
        _TIFFfree(buf);
        TIFFClose(tif);
    }

报错情况如图所示:

 

报错原因:

可能是buf 类型在分配内存的时候应该是指针类型,如下:

        buf = (unsigned char *)_TIFFmalloc(scanline);
//        buf = (tdata_t*)_TIFFmalloc(scanline);

使用tdata_t* 和unsigned char *类型都可以编译成功,但是打印出的数据不同:

tdata_t* 时,打印的数据如下:

 

使用unsigned char * 时,打印的数据如下:

 貌似使用unsigned char * 时获取的数据应该是正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LIBTIFF读取tiff文件时,打印buf出错 的相关文章

随机推荐