线程“main”中的异常java.lang.ClassCastException:[Ljava.lang.Object;不能投[B

时间:2016-01-07 16:28:18

标签: java imagej

我尝试从loci工具中读取图像并将其从imagej保存到FileSaver 但是,我在运行它时遇到了这个错误

ImagePlus[] imps = BF.openImagePlus("path/to/my/file");
for (ImagePlus imp : imps)new FileSaver(imp).saveAsRaw("E:/test.raw");

当我运行代码时,它会显示

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [B
at ij.io.ImageWriter.write(ImageWriter.java:272)
at ij.io.FileSaver.saveAsRaw(FileSaver.java:494)
at Skripsi.dcmtoraw.main(dcmtoraw.java:16)

1 个答案:

答案 0 :(得分:1)

这是一个错误,尽管说这个错误是在ImageJ 1.x中还是在Bio-Formats插件中并不容易。

In the ImageJ 1.x codeImageWriter假设(取消选中)当图像是堆栈时像素数组是Object[],而当它是单个图像平面时是byte[] 。然而,似乎Bio-Formats生成的ImagePlus个对象的像素为Object[],即使对于单个平面也是如此。 (你的图像是一个平面吗?)

您可以使用Bio-Formats Exporter插件来解决此问题。

或者您可以使用ImageJ2 API,它将在引擎盖下使用SCIFIO

/**
 * Adapted from the
 * <a href="https://github.com/imagej/imagej-tutorials">ImageJ Tutorials</a>
 * {@code LoadAndDisplayDataset} tutorial.
 */
@Plugin(type = Command.class, menuPath = "Plugins>My Useful Command")
public class UsefulCommand implements Command {

  @Parameter
  private DatasetIOService datasetIOService;

  @Parameter
  private LogService log;

  @Parameter
  private File destination;

  @Parameter
  private Dataset image;

  @Override
  public void run() {
    try {
      image = datasetIOService.save(image, destination.getAbsolutePath());
    }
    catch (final IOException exc) {
      log.error(exc);
    }
  }

}