我在一个Android视图的绘制循环中:
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不起作用(在我的RawImage上显示为黑色图像):
imageTexture2D = new Texture2D(width, height, TextureFormat.ARGB4444, false);
imageTexture2D.LoadRawTextureData(bytes);
imageTexture2D.Apply();
RawImage.texture = imageTexture2D;
有没有想法如何将Java bytes[]显示为Unity中的纹理/图像?我已经测试了字节是否正确发送,即当我从android推送{1,2,3,4}的字节数组时,我在unity侧获得{1,2,3,4}。需要注意的是,当尝试以byte[]形式传输字节时,Unity会抛出错误,所以我必须按照C#方面的建议进行操作,具体请参考此处:https://forum.unity.com/threads/androidjavaproxy-lang-reflect-array-exception.257348/。
void ReceieveAndroidBytes(AndroidJavaObject jo){
AndroidJavaObject bufferObject = jo.Get<AndroidJavaObject>("Buffer");
byte[] bytes = AndroidJNIHelper.ConvertFromJNIArray<byte[]>(bufferObject.GetRawObject()); }
在Java端,需要一个简单的byte[]容器类“Buffer”。
ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
,但我假设这会在双方都需要额外计算,需要检查当质量为100时是否正确。 - pale bone