gpt4 book ai didi

java - Android 位图图像到 Unity C# 纹理

转载 作者:行者123 更新时间:2023-12-05 07:30:46 25 4
gpt4 key购买 nike

我在 android View 的绘制循环中:

        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 bytes[] 在 Unity 中显示为纹理/图像有什么想法吗?我已经测试了字节是否正确发送,即当我从 android 推送 {1,2,3,4} 的字节数组时,我在统一端得到 {1,2,3,4}。

这并没有提到 Unity 在尝试将字节作为 byte[] 传输时会抛出错误,所以我必须遵循 this在 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 甚至比像素数据数组更原始,这可能是显卡存储压缩纹理的方式。如果这是真的,那么原始像素数据的格式不正确,无法解码。

关于java - Android 位图图像到 Unity C# 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com