安卓位图图像到Unity C#纹理



我处于安卓视图的绘制循环中:

Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), 
this.getHeight(), Bitmap.Config.ARGB_4444);
Canvas newCanvas = new Canvas(bitmap);
super.draw(newCanvas);
Log.d("AndroidUnity","Canvas Drawn!");
mImageView.setImageBitmap(bitmap);

上面的代码向我显示了附加的图像查看器上的正确绘图。

当我将位图转换为字节数组时:

ByteBuffer byteBuffer = ByteBuffer.allocate(bitmap.getByteCount());
bitmap.copyPixelsToBuffer(byteBuffer);
byte[] bytes = byteBuffer.array();

将字节导入 Unity 不起作用(在我的原始图像上显示黑色图像(:

imageTexture2D = new Texture2D(width, height, TextureFormat.ARGB4444, false);
imageTexture2D.LoadRawTextureData(bytes);
imageTexture2D.Apply();
RawImage.texture = imageTexture2D;

关于如何让 Java 字节 [] 在 Unity 中显示为纹理/图像的任何想法?我已经测试了字节是否正确发送,即当我从 android 推送 {1,2,3,4} 的字节数组时,我在单位端得到 {1,2,3,4}。

这并不是说 Unity 在尝试将字节传输为 byte[] 时会引发错误,因此我必须在 C# 端遵循以下建议:

void ReceieveAndroidBytes(AndroidJavaObject jo){
AndroidJavaObject bufferObject = jo.Get<AndroidJavaObject>("Buffer");
byte[] bytes = AndroidJNIHelper.ConvertFromJNIArray<byte[]>(bufferObject.GetRawObject()); }

和Java端的一个微不足道的byte[]容器类"Buffer">

我试图做完全相同的事情,我最初的尝试也有黑色纹理。我像你一样用AndroidJNIHelper.ConvertFromJNIArray进行数组转换,除了我用sbyte[]而不是byte[]。为了设置我最终使用的实际图像数据

imageTexture2D.SetPixelData(bytes, 0);

如果我没记错的话,LoadRawTextureData甚至比像素数据数组还要原始,这可能是显卡通过压缩存储纹理的方式。如果这是真的,那么原始像素数据的格式不正确,无法解码。

最新更新