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似乎不是问题。