Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tiff平铺:如何读取特定平铺?_Java_Apache Commons_Tiff - Fatal编程技术网

Java Tiff平铺:如何读取特定平铺?

Java Tiff平铺:如何读取特定平铺?,java,apache-commons,tiff,Java,Apache Commons,Tiff,我有一张平铺的照片。我能够阅读元数据,因此我知道平铺维度;但我不知道如何阅读特定的瓷砖。我有以下问题: 假设我的tiff由128x128个磁贴组成,如何读取位于0,0(x,y)的磁贴 我的tiff文件中有多少个磁贴 我试图开发一个代码来管理单个磁贴,但我不知道如何识别特定的磁贴位置 IImageMetadata metadata = Sanselan.getMetadata(imageFile); TiffDirectory tiffDirectory = ((TiffImageMetada

我有一张平铺的照片。我能够阅读元数据,因此我知道平铺维度;但我不知道如何阅读特定的瓷砖。我有以下问题:

  • 假设我的tiff由128x128个磁贴组成,如何读取位于0,0(x,y)的磁贴

  • 我的tiff文件中有多少个磁贴

我试图开发一个代码来管理单个磁贴,但我不知道如何识别特定的磁贴位置

IImageMetadata metadata = Sanselan.getMetadata(imageFile);
TiffDirectory tiffDirectory = ((TiffImageMetadata) metadata).findDirectory(TiffDirectoryConstants.DIRECTORY_TYPE_ROOT);

ByteSourceFile byteSource = new ByteSourceFile(imageFile);
ArrayList<?> elements = tiffDirectory.getTiffRawImageDataElements();
TiffImageData.Data data[] = new TiffImageData.Data[elements.size()];
for (int i = 0; i < elements.size(); i++) {
   TiffDirectory.ImageDataElement element = (TiffDirectory.ImageDataElement) elements.get(i);
   byte bytes[] = byteSource.getBlock(element.offset, element.length);
   data[i] = new TiffImageData.Data(element.offset, element.length, bytes);
}


TiffField tileWidthField = tiffDirectory.findField(TiffTagConstants.TIFF_TAG_TILE_WIDTH);
if (null == tileWidthField)
    throw new ImageReadException("Can't find tile width field.");
int tileWidth = tileWidthField.getIntValue();
TiffField tileLengthField = tiffDirectory.findField(TiffTagConstants.TIFF_TAG_TILE_LENGTH);
if (null == tileLengthField)
    throw new ImageReadException("Can't find tile length field.");
int tileLength = tileLengthField.getIntValue();

TiffImageData.Tiles tile = new TiffImageData.Tiles(data, tileWidth, tileLength);
IImageMetadata=Sanselan.getMetadata(imageFile);
TiffDirectory TiffDirectory=((TiffImageMetadata)元数据).findDirectory(TiffDirectoryConstants.DIRECTORY\类型\根目录);
ByteSourceFile byteSource=新的ByteSourceFile(图像文件);
ArrayList elements=tiffDirectory.getTiffRawImageDataElements();
TiffImageData.Data Data[]=新的TiffImageData.Data[elements.size()];
对于(int i=0;i

我正在使用Apache孵化器来进行这些操作。

TIFF磁贴按行的主要顺序排列,因此确定需要阅读的磁贴相对简单。对于您的特定问题,(0,0)处的平铺是平铺#0。瓷砖的数量根据以下公式计算:

Horizontal_Tiles = (Image_Width + Tile_Width-1)/Tile_Width;
Vertical_Tiles   = (Image_Height + Tile_Height-1)/Tile_Height;
Total_Tiles      = Horizontal_Tiles * Vertical_Tiles;

你检查了吗?是的,但它没有报告瓷砖提取的示例,我不知道如何制作。