项目unity游戏在接sdk分享的时候,感觉这个东西可以写一下:
//首先用C#代码保存预设中的二维码到本地
public virtual void savePng(string fileName,RawImage image)
{
Texture2D tex = image.mainTexture as Texture2D;
if(tex == null) return;
string filePath = Application.persistentDataPath + "/code/";
if(!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
byte[] allBt = tex.EncodeToPng();
try
{
File.WriteAllBytes(filePath+fileName+".png",allBt);
}
catch(IOException e)
{
}
call("savePng",fileName,filePath);
}
注意,这里的call是调用Android里面的方法,为什么要调用sdk来保存,因为直接保存到本地,是无法刷新相册的,需要sdk来刷新相册,这样玩家打开相册就可以看到保存下来的二维码
//Android sdk mainActivity 的方法
public void savePng(final String fileName,final String filePath)
{
this.runOnUiThread(new Runnable(){
public void run(){
Bitmap bitmap = BitmapFactory.decodeFile(filePath+fileName+".png");
File dir = new File(Environment.getExternalStorageDirectory()+"DCIM/Camera");
if(!dir.exists() && !dir.isDirectory())
{
dir.mkdir();
}
File file = new File(Environment.getExternalStorageDirectory()+"DCIM/Camera"+fileName+".jpg");
if(!file.exists())
{
try
{
file.createNewFile();
}
catch(IOException e)
{
e.printStackTreace();
}
}
FileOutPutStream fos = null;
try
{
fos = new FileOutputStream(file);
}
catch(FileNotFoundException e)
{
e.printStackTreace();
}
bitmap.compress(CompressFormat.JPEG,100,fos);
try
{
fos.flush();
}
catch(IOException e)
{
e.printStackTreace();
}
try
{
fos.close();
}
catch(IOException e)
{
e.printStackTreace();
}
bitmap.recycle();
//刷新相册操作,必要!
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(file);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
}
}
//需要注意的是一般二维码只需要保存一次即可,可以判断下是否已经保存,毕竟这是持久化操作,Texture2D每次要拷贝一份数据作为副本来写入图片,比较耗性能,RawImage对应的texture如果是二进制,通过下面方法设置——
pubilc static void SetTexture(RawImage image,string qrdata)
{
byte[] data = System.Convert.FromBase64String(qrdata);
Texture2D tex = new Texture2D(350,350);
tex.LoadImage(data);
image.texture = tex;
}
如果是图片,需要设置是Advanced格式,勾选Read/Write Enabled,还有Encode as RGBM 选择Encoded,这样才能读取和写到本地。