Java';s Graphics.drawImage生成不准确的图像

Java';s Graphics.drawImage生成不准确的图像,java,image,rendering,Java,Image,Rendering,我试图使用graphics.drawImage()将一幅图像绘制到另一幅图像上,但它只对某些图像起到精确的作用,而对其他图像则会造成混乱。下面是我的代码,我已经确定纹理在进入方法时是正确的图像,所以绝对不是这样。有什么想法吗 private BufferedImage currentSheet; public void swapRegionWithTexture(Rectangle region, Image texture) { Graphics sheetGraphics = cur

我试图使用
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();
}
private buffereImage当前页;
public void swapRegionWithTexture(矩形区域,图像纹理){
Graphics sheetGraphics=currentSheet.createGraphics();
for(int ix=region.x;ix
总的想法是:

  • 抓取要绘制的图形
  • 清除将要绘制的图形部分
  • 在图形上的给定位置绘制图像
  • 处理图形

  • 因此,您当前的原子步骤是:

    • 创建一个新的缓冲映像
    • 向缓冲图像写入原始纹理的一些疯狂操作(看起来你正在反转它?)
    • 将原始图像写入当前工作表
    如果你改变这个怎么办

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

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

    否则,你会花时间反转图像并放入缓冲纹理,然后再也不会使用缓冲区做任何事情。。。因此,您可能打算在某个地方使用缓冲纹理。

    您能定义不准确的纹理吗?也许提供期望和实际输出的屏幕截图?这似乎是一个阿尔法问题。您是否尝试将
    BufferedImage.TYPE_INT_ARGB
    更改为
    BufferedImage.TYPE_INT_RGB
    ?是的,它只是完全删除了alpha通道。-这是一个关于这之前和之后的图片画廊。很抱歉,如果它们很小,这是一个基于Minecraft的项目。哈!谢谢你指出这一点,我只是在发布之前尝试了这个新的、奇怪的策略,所以我错过了这一部分,因为这是我最初的尝试。但是,它不起作用。我仍然得到不准确的结果。我希望我能发布图片,但显然我还不能。我所能做的就是说,在手术后,它似乎变得更加像素化,而且它并不总是结果,大部分时间它都按预期工作。至于这个奇怪的方法,我只是把它转换成一个BuffereImage,以获得给定点的实际RGB值。你可以将它们上传到tiny pic,并将链接放在评论中。啊,我们开始了。我真的不能确定到底发生了什么,感觉像是一个较低的质量,但有些人把他们的颜色弄乱了,或者变成了灰色。老实说,看起来你的阿尔法在什么地方被弄乱了。我目前正在研究如何将这一点转移过来,这可能也是你想要指导你的工作的地方。只是上传了一些受影响图像的视频,alpha似乎不是问题。