libgdx纹理区域到Pixmap

libgdx纹理区域到Pixmap,libgdx,pixmap,Libgdx,Pixmap,如何从TextureRegion或Sprite创建Pixmap?我需要它来更改某些像素的颜色,然后从Pixmap(在加载屏幕期间)创建新纹理。Texture-Texture=textureRegion.getTexture(); 如果(!texture.getTextureData().isPrepared()){ texture.getTextureData().prepare(); } Pixmap Pixmap=texture.getTextureData().consumePixmap(

如何从TextureRegion或Sprite创建Pixmap?我需要它来更改某些像素的颜色,然后从Pixmap(在加载屏幕期间)创建新纹理。

Texture-Texture=textureRegion.getTexture();
如果(!texture.getTextureData().isPrepared()){
texture.getTextureData().prepare();
}
Pixmap Pixmap=texture.getTextureData().consumePixmap();
如果只需要该纹理的一部分(区域),则必须进行一些手动处理:

for(int x=0;x
如果您不想逐个像素地浏览
纹理区域
,也可以将该区域绘制到新的
像素地图上

公共Pixmap extractPixmapFromTextureRegion(TextureRegion TextureRegion){
TextureData TextureData=textureRegion.getTexture().getTextureData()
如果(!textureData.isPrepared()){
textureData.prepare();
}
Pixmap Pixmap=新的Pixmap(
textureRegion.getRegionWidth(),
textureRegion.getRegionHeight(),
textureData.getFormat()
);
pixmap.drawPixmap(
textureData.consumePixmap(),//另一个Pixmap
0,//目标x坐标(左上角)
0,//目标y坐标(左上角)
textureRegion.getRegionX(),//源x坐标(左上角)
textureRegion.getRegionY(),//源y坐标(左上角)
textureRegion.getRegionWidth(),//其他像素贴图的区域宽度(以像素为单位)
textureRegion.getRegionHeight()//该区域相对于其他像素贴图的高度(以像素为单位)
);
返回pixmap;
}

谢谢,但是afaik
textureRegion.getTexture()
将返回整个texrure(atlas)?是的,它确实会这样做。没有其他方法,因为只有一种纹理(这就是拥有地图册的全部意义)。您必须创建自己的较小的Pixmap并复制部分区域。我添加了一个小代码段(未测试)来说明如何做到这一点。>“我添加了一个小代码段(未测试)”经过测试,它可以工作:)(以新的Pixmap结尾,然后当然是“texture.getTextureData().dispose()”和“Pixmap.dispose”。或者我错了吗?)这取决于之后是否仍要将源纹理用于其他对象。如果你不想这样,那么你应该处理它。实际上,这个方法工作得很好,并且具有一般的特性,可以放在某个助手类中。我更喜欢这种方式,而不是手动复制公认的答案。非常感谢。当你寻找某样东西并找到自己答案的那一刻-_-