@Test(dependsOnMethods = {"testMetadataLevel"})
  public void testMetadataLevelEquivilentPlaneData() throws FormatException, IOException {
    for (int i = 0; i < minimalWrapper.getSeriesCount(); i++) {
      minimalWrapper.setSeries(i);
      wrapper.setSeries(i);
      assertEquals(wrapper.getImageCount(), minimalWrapper.getImageCount());
      for (int j = 0; j < minimalWrapper.getImageCount(); j++) {
        byte[] pixelsOnlyPlane = minimalWrapper.openBytes(j);
        String pixelsOnlySHA1 = sha1(pixelsOnlyPlane);
        byte[] allPlane = wrapper.openBytes(j);
        String allSHA1 = sha1(allPlane);

        if (!pixelsOnlySHA1.equals(allSHA1)) {
          fail(
              String.format(
                  "MISMATCH: Series:%d Image:%d PixelsOnly%s All:%s",
                  i, j, pixelsOnlySHA1, allSHA1));
        }
      }
    }
  }
 /**
  * Read a plane and update the pixels checksum
  *
  * @param size Sizes of the Pixels set.
  * @param z The Z-section offset to write to.
  * @param c The channel offset to write to.
  * @param t The timepoint offset to write to.
  * @param bytesPerPixel Number of bytes per pixel.
  * @param fileName Name of the file.
  * @param md Current Pixels set message digest.
  * @throws FormatException If there is an error reading Pixel data via Bio-Formats.
  * @throws IOException If there is an I/O error reading Pixel data via Bio-Formats.
  */
 private void parseDataByPlane(
     ImportSize size, int z, int c, int t, int bytesPerPixel, String fileName, MessageDigest md)
     throws FormatException, IOException {
   int tileHeight = reader.getOptimalTileHeight();
   int tileWidth = reader.getOptimalTileWidth();
   int planeNumber, x, y, w, h;
   for (int tileOffsetY = 0;
       tileOffsetY < (size.sizeY + tileHeight - 1) / tileHeight;
       tileOffsetY++) {
     for (int tileOffsetX = 0;
         tileOffsetX < (size.sizeX + tileWidth - 1) / tileWidth;
         tileOffsetX++) {
       x = tileOffsetX * tileWidth;
       y = tileOffsetY * tileHeight;
       w = tileWidth;
       h = tileHeight;
       if ((x + tileWidth) > size.sizeX) {
         w = size.sizeX - x;
       }
       if ((y + tileHeight) > size.sizeY) {
         h = size.sizeY - y;
       }
       int bytesToRead = w * h * bytesPerPixel;
       if (arrayBuf.length != bytesToRead) {
         arrayBuf = new byte[bytesToRead];
       }
       planeNumber = reader.getIndex(z, c, t);
       if (log.isDebugEnabled()) {
         log.debug(
             String.format(
                 "Plane:%d X:%d Y:%d TileWidth:%d TileHeight:%d " + "arrayBuf.length:%d",
                 planeNumber, x, y, w, h, arrayBuf.length));
       }
       arrayBuf = reader.openBytes(planeNumber, arrayBuf, x, y, w, h);
       try {
         md.update(arrayBuf);
       } catch (Exception e) {
         // This better not happen. :)
         throw new RuntimeException(e);
       }
     }
   }
 }