我试图通过转换将位图转换为libGDX纹理:
Bitmap
到byte[]
byte[]
to libGDX Pixmap
Pixmap
to 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();
}
}
发布于 2013-05-01 16:47:10
嗯,另一种可能是你有一个线程问题。当libgdx在呈现线程上同时加载纹理时,在UI线程上加载自己的非托管纹理时,我注意到了这种问题。如果这是问题所在,那么简单的解决方案就是使用Gdx.app.postRunnable将纹理的创建与呈现线程同步。即:
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();
}
}
发布于 2014-01-23 13:06:20
如果目标是将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
}
});
发布于 2013-06-19 23:11:03
您必须在一个新线程上进行编码,因为像素映射类需要时间进行字节转换,有时还会返回一个临时像素映射,以防进程尚未完成,所以最好在单独的线程上运行,这样您的问题就会得到解决。
https://stackoverflow.com/questions/14930463
复制相似问题