我正在尝试使用GraphicsContext.drawImage(...)JavaFX 8下的方法渲染.png图像.我的代码可以很好地处理大小为~1000px x 2000px的图像.但不幸的是,我需要渲染大小为7000px x 14000px的图像.加载此图像也可以正常工作,但在调用drawImage(image, 0, 0, canvas.getWidth(), canvas.getHeight())方法时,我得到以下错误输出:
java.lang.NullPointerException
at com.sun.prism.impl.BaseGraphics.drawTexture(BaseGraphics.java:389)
at com.sun.prism.impl.ps.BaseShaderGraphics.drawTexture(BaseShaderGraphics.java:139)
at com.sun.javafx.sg.prism.NGCanvas.handleRenderOp(NGCanvas.java:1228)
at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:997)
at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:578)
... more rendering stuff here
at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2043)
at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1951)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:469)
at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:317)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:89)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:129)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
如果我在绘制到画布时尝试调整图像大小或者尝试渲染整个图像时,它没有什么区别.
我的猜测是图像大小太大而无法呈现,但我无法找到任何来源来验证这一点,我也找不到任何可以解决我的问题.
我还对Java堆(使用Eclipse Memory Analyzer)进行了分析,显示图像大小约为376 MB.
基本上我的问题是:1.为什么我的程序崩溃了?是因为图像太大了吗?2.如果我的图像太大,我怎样才能增加Java的可用空间?我的机器有8GB内存,显卡有1GB内存,所以<400MB的图像应该不是问题.