Java BuffereImage像素与Graphics.drawImage
制作缓冲图像与使用以下方法绘制像素之间的区别是什么:Java BuffereImage像素与Graphics.drawImage,java,image,graphics,pixels,Java,Image,Graphics,Pixels,制作缓冲图像与使用以下方法绘制像素之间的区别是什么: private BufferedImage img; private int[] pixels; pixels = ((DataBufferInt) img.getRaster().getDataBuffer()); 而仅仅是使用一个图像作为 img 变量,并使用img的图形执行以下操作: img.getGraphics().drawImage(/*image*/, x, y, observer); 编辑: 这是为了游戏开发 使用g
private BufferedImage img;
private int[] pixels;
pixels = ((DataBufferInt) img.getRaster().getDataBuffer());
而仅仅是使用一个图像作为
img
变量,并使用img的图形执行以下操作:
img.getGraphics().drawImage(/*image*/, x, y, observer);
编辑:
这是为了游戏开发 - 使用
getGraphics()李>
- 请注意,您不应该像演示的那样通过链接执行此操作:
img.getGraphics().drawImage(/*image*/,x,y,observer)代码>由于这不允许您在处理完图形对象后立即将其丢弃,因此可能会耗尽资源
- 直接操纵光栅的位可能是一种更快的改变方式,但我相信如何做到这一点取决于您使用的BuffereImage的类型
- 请注意,您不应该像演示的那样通过链接执行此操作:
图形方法的优势:
- 使用现成的高级操作,如
drawImage
- 在某些平台上,您可能会受益于硬件加速/优化
- 它相对独立于底层图像格式工作
降低像素缓冲区级别的优点:
- 它对于非常专业的用途非常有用,例如,通过某种公式/计算生成每个像素(例如,我使用此技术生成自定义颜色渐变)
- 对于单个像素操作(但对于
drawImage
等批量操作,速度可能会稍快一些,因为您无法获得硬件加速)
如果只是游戏中的常规屏幕渲染,我认为图形
路线可能是最好的。如果你正在做一些有趣的事情,比如动态图像生成,那么像素缓冲区路径是值得探索的。这和@mikera的答案都很好,似乎都支持drawImage()
。我喜欢这个答案,因为它提到了dispose()
问题,这很重要。可能还值得一提的是,在OP中直接访问光栅/数据缓冲区可能会在映像实例的生命周期(!)内禁用sw/hw优化,因此请小心使用。如有疑问,请提供个人资料。:-)