unity3d和Android java通信 传输 byte图片在Texture2d显示
经过两三天的折腾 将安卓图片变成byte再变成string传输到unity进行显示图片,遇到了很多的难处,除了查资料就是查文档;
终于解决了问题,在这里我分享一下我的经验:
java和unity3d 通信问题,这里我不再赘述,网上都有大把的资料我主要列出重点:
java:
public synchronized static byte[] BitmapToByte(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
public synchronized static String BytesToString(byte[] imagedata){
return Base64.encodeToString(imagedata, Base64.DEFAULT);
}
public synchronized static Bitmap DrawableToBitmap(Drawable drawable){
return (((android.graphics.drawable.BitmapDrawable) drawable).getBitmap());
}
这是三个函数互相转换我是最后转换成了string 传输,因为我用的是app的icon图片所有用了这个,也可以从sdcard加载,
Base64.encodeToString(imagedata, Base64.DEFAULT)//,保证数据协议
unity3d c#代码部分:
private byte[] gerEncodeBytes(string byteStr)
{
return Convert.FromBase64String(byteStr);
}
private Sprite getEncodeSprite(byte[] iconBytes, int width, int height)
{
Debug.Log(iconBytes.Length + "|" + width + "|" + height);//87408
Texture2D tex = new Texture2D(width, height);
try
{
tex.LoadImage(iconBytes);
}
catch (Exception)
{
}
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
return sprite;
}
宽度和高度 width /height 我是通过安卓drawable属性直接获取了,然后通过json序列号传输string到unity进行反序列化;
drawable.getIntrinsicWidth() 这是固有的宽度
测试成功,好图片数据传输就完成了,sprite就可以显示了,