commit 237c4d8c47c687b2c0851f444c6a9dd54175e120 Author: along Date: Thu Jul 10 23:44:07 2025 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a02ede --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# ---> C +/imgs +/.vscode +/app +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e946fa2 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# tiff-io_uring + +异步I/O读取geotiff。 \ No newline at end of file diff --git a/tile_info b/tile_info new file mode 100755 index 0000000..9a40ab0 Binary files /dev/null and b/tile_info differ diff --git a/tile_info.c b/tile_info.c new file mode 100644 index 0000000..e0e6329 --- /dev/null +++ b/tile_info.c @@ -0,0 +1,58 @@ +#include +#include + +int main() +{ + TIFF *tif = TIFFOpen("imgs/ortho.tif", "r"); + if (!tif) + { + printf("Failed to open file.\n"); + return 1; + } + + uint32 tileWidth, tileHeight; + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tileWidth); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &tileHeight); + printf("Tile size: %dx%d\n", tileWidth, tileHeight); + + uint32 imageWidth, imageHeight; + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imageWidth); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageHeight); + + uint32 tilesAcross = (imageWidth + tileWidth - 1) / tileWidth; + uint32 tilesDown = (imageHeight + tileHeight - 1) / tileHeight; + uint32 totalTiles = tilesAcross * tilesDown; + printf("Tile count: %d x %d = %d\n", tilesAcross, tilesDown, totalTiles); + + uint16 samplesPerPixel; + uint16 bitsPerSample; + + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel); + TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bitsPerSample); + + // 一个像素有几个通道sample,一个sample有多少位 + printf("Samples per pixel: %d\n", samplesPerPixel); + printf("Bits per sample: %d\n", bitsPerSample); + + uint16 sampleFormat = SAMPLEFORMAT_UINT; // 默认无符号 + TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sampleFormat); + + printf("Sample format: %d\n", sampleFormat); // 1=uint, 2=int, 3=float + + tsize_t *byteCounts = NULL; + toff_t *offsets = NULL; + + TIFFGetField(tif, TIFFTAG_TILEBYTECOUNTS, &byteCounts); + TIFFGetField(tif, TIFFTAG_TILEOFFSETS, &offsets); + + for (uint32 i = 0; i < totalTiles; i++) + { + printf("Tile %3d: Offset = %8llu, Size = %6lu bytes\n", + i, + (unsigned long long)offsets[i], + (unsigned long)byteCounts[i]); + } + + TIFFClose(tif); + return 0; +}