2012-07-19 25 views
1

我试图使用graphics.drawImage()绘制一个图像到另一个图像,但它只能为某些图像准确地工作,而其他图像则会混乱。我的代码如下,我确定texture是进入方法时的正确图像,所以绝对不是。有任何想法吗?Java的Graphics.drawImage产生一个不准确的图像

private BufferedImage currentSheet; 
public void swapRegionWithTexture(Rectangle region, Image texture) { 
    Graphics sheetGraphics = currentSheet.createGraphics(); 
    for (int ix = region.x; ix < region.x + region.width; ix++) { 
     for (int iy = region.y; iy < region.y + region.height; iy++) { 
      currentSheet.setRGB(ix, iy, 0x000000); 
     } 
    } 
    sheetGraphics.drawImage(texture, region.x, region.y, null); 
    sheetGraphics.dispose(); 
} 

的总体思路是:

  1. 抓住图形绘制到。
  2. 清除将绘制的图形部分。
  3. 在图形的给定位置绘制图像。
  4. 处理图形。
+2

你能定义不准确吗?也许提供期望和实际输出的屏幕截图? – corsiKa 2012-07-19 19:25:23

+0

这似乎是一个alpha问题。您是否尝试将'BufferedImage.TYPE_INT_ARGB'更改为'BufferedImage.TYPE_INT_RGB'? – elias 2012-07-19 19:55:11

+0

是的,它只是完全删除了alpha通道。 – 2012-07-19 23:27:00

回答

0

您当前的原子步骤是这样的:

  • 创建一个新的缓冲图像
  • 写入到缓存图像的原始质感的一些疯狂的操纵
  • (看起来像你倒车吗?)
  • 原始图像写入当前工作表。

所以,如果你改变一下这个

sheetGraphics.drawImage(texture, region.x, region.y, null); 

这个

sheetGraphics.drawImage(bufferedTexture, region.x, region.y, null); 

否则你花时间倒车影像和投入缓冲质地从来就不是做任何与该缓冲区...所以你有可能在某处使用缓冲纹理。

+0

哈!感谢您指出这一点,我**只是在我发布之前尝试了这个新奇怪的策略,所以我错过了这个部分,因为这是我最初的尝试。 但是,它不起作用。我仍然得到不准确的结果。我希望我可以张贴图像,但我现在还不能。我能做的最好的就是说在程序结束后它会变得更加像素化,并不总是结果,大部分时间它按预期工作。 至于奇怪的方法,我只是将其转换为BufferedImage,以获得在给定点的实际RGB值。 – 2012-07-19 19:34:41

+0

你可以将它们上传到小图片并将链接放在评论中。 – corsiKa 2012-07-19 19:38:40

+0

啊,我们走了。我无法确定发生了什么事情,感觉质量较差,但有些会让他们的颜色混乱或灰色阴影。 – 2012-07-19 19:48:13

相关问题