我试图通过转换:
将位图转换为libGDX纹理Bitmap
至byte[]
byte[]
到libGDX Pixmap
Pixmap
到libGDX Texture
我面临的问题是转换为纹理的位图是从资源文件夹中的纹理打包器中绘制精灵表
public void onByteArrayOfCroppedImageReciever(byte[] bytes) {
try {
pmap=new Pixmap(bytes, 0, bytes.length);
tex=new Texture(pmap);
face=new Sprite(tex);
// game.setScreen(new GameScreen(game, batcher, face));
} catch(Exception e) {
Gdx.app.log("KS", e.toString());
e.printStackTrace();
}
}
答案 0 :(得分:17)
如果目标是将Android位图转换为libgdx纹理,则根本不需要使用Pixmap。您可以在简单的OpenGL和Android GLUtils的帮助下直接完成。尝试以下方法;它比您的解决方案快100倍。我假设你不在渲染线程中(你最不可能)。如果是,您不需要调用postRunnable()。
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
Texture tex = new Texture(bitmap.getWidth(), bitmap.getHeight(), Format.RGBA8888);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, tex.getTextureObjectHandle());
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
bitmap.recycle();
// now you have the texture to do whatever you want
}
});
答案 1 :(得分:12)
public void onByteArrayOfCroppedImageReciever(byte[] bytes) {
try {
pmap=new Pixmap(bytes, 0, bytes.length);
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
tex=new Texture(pmap);
face=new Sprite(tex);
}
});
} catch(Exception e) {
Gdx.app.log("KS", e.toString());
e.printStackTrace();
}
}
答案 2 :(得分:1)
你必须在一个新线程上编码,因为pixmap类需要时间进行字节转换,有时会返回一个临时像素图,以防过程没有完成,所以最好在一个单独的线程上运行,你的问题就会得到解决。
答案 3 :(得分:1)
您是否致力于该运营管道?以下是您要求进行转换的另一种方法:
(arr[i] << 8) | (arr[i]>>24)
上面的管道包含多个像素数据的副本和重新压缩;此管道允许您仅使用一个副本(无论如何都需要字节格式转换)将Bitmap数据直接输入到纹理中。这对你有用吗?