关于unity截图unity3d 保存截图到相册 怎么写

1142人阅读
Unity3D(46)
/blog/archives/22
今天开发了一个在Unity里将屏幕截图保存到iOS照片应用的功能,非常简单,当然,读者最好对Unity和iOS的集成有过至少一次实践经验。首先,还是将工程分为两层——Unity层、iOS层,两者靠extern的方法(Unity→iOS)和UnitySendMessage方法(iOS→Unity)进行通信。在iOS层,使用UIImageWriteToSavedPhotosAlbum()方法将图片保存到相册。一个应用第一次调用这个方法时会询问用户是否允许访问相册。iOS层的代码如下PhotoManager.h#import &Foundation/Foundation.h&
@interface PhotoManager : NSObject
- ( void ) imageSaved: ( UIImage *) image didFinishSavingWithError:( NSError *)error
&&&&contextInfo: ( void *) contextI
PhotoManager.m
#import &PhotoManager.h&
@implementation PhotoManager
- ( void ) imageSaved: ( UIImage *) image didFinishSavingWithError:( NSError *)error
&&&&contextInfo: ( void *) contextInfo
&&&&NSLog(@&保存结束&);
&&&&if (error != nil) {
&&&&&&&&NSLog(@&有错误&);
void _SavePhoto(char *readAddr)
&&&&NSString *strReadAddr = [NSString stringWithUTF8String:readAddr];
&&&&UIImage *img = [UIImage imageWithContentsOfFile:strReadAddr];
&&&&NSLog([NSString stringWithFormat:@&w:%f, h:%f&, img.size.width, img.size.height]);
&&&&PhotoManager *instance = [PhotoManager alloc];
&&&&UIImageWriteToSavedPhotosAlbum(img, instance,
&&&&&&&&@selector(imageSaved:didFinishSavingWithError:contextInfo:), nil);
注意UIImageWriteToSavedPhotosAlbum()的用法,其中有一个method selector用来异步地返回结果,如例子中所示的,即是在保存完成时调用PhotoManager的实例instance上的imageSaved方法,在这个方法里可以得到结果,更可以用UnitySendMessage将结果发送回Unity层。当然如果不需要结果,则只需要_SavePhoto这一个方法就足够了,甚至不需要头文件以及PhotoManager类,这个类派生自NSObject,作用只是为了承接UIImageWriteToSavedPhotosAlbum的结果回调。
再看Unity层。
using UnityE
using System.Runtime.InteropS
public class TestSavePhoto : MonoBehaviour
[DllImport(&__Internal&)]
private static extern void _SavePhoto(string readAddr);
private string _cptrA
private void OnGUI()
if (GUILayout.Button(&_SavePhoto!&, GUILayout.Height(50), GUILayout.Width(200)))
Debug.Log(&_SavePhoto&);
var readAddr = Application.persistentDataPath + &/& + _cptrA
_SavePhoto(readAddr);
if (GUILayout.Button(&TakePhoto&, GUILayout.Height(50), GUILayout.Width(200)))
Debug.Log(&TakePhoto&);
var cptrAddr = &testpic&; //捕捉地址
var readAddr = Application.persistentDataPath + &/& + cptrA//读取地址,这两个地址在iOS里不一样
Debug.Log(&cptr:& + cptrAddr + &, read:& + readAddr);
Application.CaptureScreenshot(cptrAddr);
_cptrAddr = cptrA
注意其中用到的两个地址(捕捉地址、读取地址,两者在iOS中不一样,其他平台的情况会在另外的文章中详述),将读取地址传到iOS层即可。
总结下来就是:
1、Unity层用Application.CaptureScreenshot()截图
2、将读取地址传给iOS层
3、iOS层用UIImageWriteToSavedPhotosAlbum保存到相册
4、处理保存结果
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34689次
排名:千里之外
原创:27篇
转载:28篇
(1)(2)(2)(2)(4)(2)(9)(4)(1)(1)(2)(1)(1)(1)(22)Unity3d截图保存到Android相册的实现
Unity3d截图保存到Android相册的实现--ultrasoon 季风原创
1.Unity3d场景中先加入屏幕抓图功能:
Application.CaptureScreenshot("Screenshot.png");
这样Screenshot.png就存到了你的app沙盒中,请检查/sdcard/Android/data/com.ultrasoon.MyApp/,这个是我的app沙盒路径.这个是第一步,之后还要保存到相册中。
2.unity中点击保存到相册按钮unity部分代码:
1 public static AndroidJavaC
4 void Awake ()
if(Application.platform == RuntimePlatform.Android ) {
plugin = new AndroidJavaClass("com.ultrasoon.MyApp.Binding");
11 void OnGUI()
if (GUI.Button(new Rect(20, 20, 100, 5), "save"))
//保存到相册,调用自己写的Binding插件
plugin.CallStatic("savebuttonClicked");
3.Binding插件的实现.import对应的package
Binding.cs部分代码:
1 public static C
3 // 保存到相册
4 public static void savebuttonClicked() {
//取得你XXXXXXXActivity的context.用自己的,不能用this,插件中调用静态的方法
context = XXXXXXXActivity.getApplicationContext();
XXXXXXXActivity.runOnUiThread(new Runnable() {
public void run() {
// file:///sdcard/Android/data/com.ultrasoon.MyApp/files/Screenshot.png
Bitmap bitmap = Binding
.getDiskBitmap("/sdcard/Android/data/com.ultrasoon.MyApp/files/Screenshot.png");
if (bitmap != null) {
MediaStore.Images.Media.insertImage(
context.getContentResolver(), bitmap, "myPhoto", "");
context.sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
Toast.makeText(
" 恭喜你!照片已保存到你的相册中! ", Toast.LENGTH_SHORT).show();
31 // 读图
32 public static Bitmap getDiskBitmap(String url) {
Bitmap bitmap = null;
File file = new File(url);
if (file.exists()) {
bitmap = BitmapFactory.decodeFile(url);
} catch (Exception e) {
4.编译打包插件Binding,打包成jar,到unity的Asserts中下面的plugins目录里面。
OK了。具体细节希望自己摸索!
--ultrasoon 季风原创
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
当前项目使用的cocos2d-x 1.0.3的版本.方法和2.0以后的版本的可能名字不太一样,但是大体意思一致: coocs2d-x 截图使用 CCRenderTexture的方法 参考资料: /wxd-2b09a027bb68a98270fefa26-1.html http://blog.csdn.net/xexiyong/ ...
excel保存到android数据库中 ,excel中的竖直数据保存不了 附图: try { Workbook wb=Workbook.getWorkbook(new File(&/mnt/sdcard/.xls&)); Sheet sheet=wb.getSheet(0);//get a Sheet object in ...
引入 如何将图片保存到IOS自带的PhotoAlbum中? 实现 在一个视图中有一个UIImageView,当单击此UIImageView,将UIImageView中的UIImage所代表的图片保存到PhotoAlbum中. 代码 - (void)touchesBegan:(NSSet *)toucheswithEvent:(UIEvent *)event
如题,这个需求本不是一个很复杂的过程,但是却存在一些隐患,我也是最近在项目中碰到这个问题,将Android通过相机或相册获取图片并最终显示在界面上做了一个小研究,现将一些结果和附上的一个Demo叙述如下: 做过类似需求的同学都知道,在Activity中通过如下代码可以启动相机,然后在重写的onActivityResult方法中可以获取到返回的照片数据: In ...
做过类似需求的同学都知道,在Activity中通过如下代码可以启动相机,然后在重写的onActivityResult方法中可以获取到返回的照片数据: Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraI ...
开发环境: Win XP + eclipse-jee-helios(版本号3.6) + ADT(版本10.0.1) + Android SDK(版本10): 模拟器及真机测试环境:Android2.2 在Android学习笔记之文件的保存与读取中学习了数据的保存,它是将数据直接保存到手机自带的存储空间,这些一般是比较小的文件.那么如何将较大的数据保存到SDC ...
今天做了个小功能,就是把我们程序Drawable里面的图片保存到data目录下面,然后另外一个程序需要读取data目录里面保存的图片.涉及了data目录读写.这功能看上去挺简单,不过实际做的时候还是遇到点问题,因此把相关读写代码记录下来,方便以后查阅. (PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:) 1.目录权限问题 A ...
Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExternalStorageDirectory()方式.
public void saveToSDCard(String filename, String conte ...扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1145
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 684|回复: 9
Unity保存图片到Android相册
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1192
在线时间278 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 仅为年时 于
22:03 编辑
[Java] 纯文本查看 复制代码
package com.xuefei.
import java.io.F
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import com.unity3d.player.UnityPlayerNativeA
import android.content.C
import android.content.I
import android.graphics.B
import android.pressF
import android.graphics.BitmapF
import android.net.U
import android.os.B
import android.os.E
import android.util.L
import android.widget.T
public class MainActivity extends UnityPlayerNativeActivity {
public static C
public static MainActivity mainA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivity =
// 保存到相册
public static void savePng(final String fileName) {
context = mainActivity.getApplicationContext();
mainActivity.runOnUiThread(new Runnable() {
public void run() {
Bitmap bitmap = BitmapFactory.decodeFile(Environment
.getExternalStorageDirectory()
+ &/Android/data/com.xuefei.game/files/&
+ fileName
+ &.png&);
File file = new File(Environment.getExternalStorageDirectory()
+ &/DCIM/Camera&, fileName + &.jpg&);
FileOutputStream fos =
fos = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Log.w(&cat&, e.toString());
press(CompressFormat.JPEG, 100, fos);
fos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.w(&cat&, e.toString());
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.w(&cat&, e.toString());
bitmap.recycle();//扫描保存的图片
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(&file://& +Environment.getExternalStorageDirectory()
+ &/DCIM/Camera/&+fileName + &.jpg&)));
Toast.makeText(context, &照片已保存到相册&, Toast.LENGTH_SHORT).show();
Unity中代码:[C#] 纯文本查看 复制代码if (GUI.Button(new Rect(0, 720, 400, 120), &SavePng&))
StartCoroutine(SavePngToSD(DateTime.Now.ToFileTime().ToString()));
/// &summary&
/// 截图后先检测图片是否保存成功然后调用保存到相册
/// &/summary&
/// &param name=&name&&&/param&
public void SavePng(string name)
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass(&com.unity3d.player.UnityPlayer&);
AndroidJavaObject jo = jc.GetStatic&AndroidJavaObject&(&currentActivity&);
jo.CallStatic(&SavePng&, name);
UNITY_IPHONE
/// &summary&
/// 保存截图到相册
/// &/summary&
/// &param name=&pngName&&&/param&
/// &returns&&/returns&
IEnumerator SavePngToSD(string pngName)
yield return new WaitForEndOfFrame();
Application.CaptureScreenshot(pngName + &.png&);
while (!IsFileExistByPath(Application.persistentDataPath + &/& + pngName + &.png&))
yield return new WaitForSeconds(0.05f);
SavePng(pngName);
yield return new WaitForSeconds(0.3f);
//测试请求文件
WWW www = new WWW(&file:///& + Application.persistentDataPath + &/& + pngName + &.png&);
/// &summary&
/// 检测文件是否存在
/// &/summary&
/// &param name=&path&&&/param&
/// &returns&&/returns&
public static bool IsFileExistByPath(string path)
FileInfo info = new FileInfo(path);
if (info == null || info.Exists == false)
注意文件路径是否存在,不存在就创建
流程:Unity截屏--调用安卓拷贝到相册--扫描保存的文件
解决的:截屏图片在相册不显示。
iOS的下篇文章写。
unity 打开本地相册;unity toast实现;unity 调用相册;unity打开相册;unity 调用本地相册
(72.55 KB, 下载次数: 0)
21:29 上传
(895.67 KB, 下载次数: 0)
21:29 上传
每日推荐:
15排名<font color="#FF昨日变化19主题帖子积分
蛮牛币3151
在线时间490 小时
你这是java啊,写的详细一点,我咋不懂你要完成的是什么呢?
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1192
在线时间278 小时
你这是java啊,写的详细一点,我咋不懂你要完成的是什么呢?
之前没有修改完,现在可以了
每日推荐:
5559/1000排名<font color="#FF昨日变化17主题帖子积分
熟悉之中, 积分 559, 距离下一级还需 441 积分
熟悉之中, 积分 559, 距离下一级还需 441 积分
蛮牛币1772
在线时间85 小时
谢谢分享!
每日推荐:
5936/1000排名<font color="#FF昨日变化7主题帖子积分
熟悉之中, 积分 936, 距离下一级还需 64 积分
熟悉之中, 积分 936, 距离下一级还需 64 积分
蛮牛币1897
在线时间263 小时
期待IOS的。。。。。。
[]: guriheng 在网吧通宵,花了 3
每日推荐:
5936/1000排名<font color="#FF昨日变化7主题帖子积分
熟悉之中, 积分 936, 距离下一级还需 64 积分
熟悉之中, 积分 936, 距离下一级还需 64 积分
蛮牛币1897
在线时间263 小时
期待IOS的。。。。。。。。。。。。。。
每日推荐:
71879/5000排名<font color="#FF昨日变化4主题帖子积分
日久生情, 积分 1879, 距离下一级还需 3121 积分
日久生情, 积分 1879, 距离下一级还需 3121 积分
蛮牛币1385
在线时间483 小时
这样的有些手机平台还是看不到的,我目前就是这个问题
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1192
在线时间278 小时
这样的有些手机平台还是看不到的,我目前就是这个问题
可能是有的手机相册路径与众不同的原因吧?那样的情况是没办法显示到相册的,毕竟不同的安卓手机厂商相册实际地址可能不一样,或者通知更新的方式不适用于某些新版本的系统,你可以放到云测试找找原因。
每日推荐:
71879/5000排名<font color="#FF昨日变化4主题帖子积分
日久生情, 积分 1879, 距离下一级还需 3121 积分
日久生情, 积分 1879, 距离下一级还需 3121 积分
蛮牛币1385
在线时间483 小时
可能是有的手机相册路径与众不同的原因吧?那样的情况是没办法显示到相册的,毕竟不同的安卓手机厂商相册 ...
云测试怎么弄啊?
每日推荐:
3292/300排名<font color="#FF昨日变化85主题帖子积分
偶尔光临, 积分 292, 距离下一级还需 8 积分
偶尔光临, 积分 292, 距离下一级还需 8 积分
蛮牛币1022
在线时间115 小时
真想做个类似的功能。我是想先读取相册里面的照片,能像美图秀秀那样的,然后再编辑加点东西,然后再像楼主这样截取保存到一个相册,如果能指定相册名称最好了。对安卓ios手机方面的对接知道的比较少,楼主帮我看看这样可以实现吗、
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号
社区QQ达人
使用QQ帐号登录论坛的用户
连续签到30天
累积数量达到1000蛮牛币unity3d屏幕截图功能
function OnGUI(){&
&& if(GUI.Button(Rect(Screen.width*0.5-50,Screen.height*0.5-50,100,100),&screen&)){&
&&&&&& Application.CaptureScreenshot(&Screenshot.png&);&
function OnGUI(){
&& if(GUI.Button(Rect(Screen.width*0.5-50,Screen.height*0.5-50,100,100),&screen&)){
&&&&&& Application.CaptureScreenshot(&Screenshot.png&);
这张Screenshot.png图片被存在了当前工程的子目录下了。
作者:dlnuchunge
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'在Unity3D中加载外部图片的两种步骤 - 移动开发当前位置:& &&&在Unity3D中加载外部图片的两种步骤在Unity3D中加载外部图片的两种步骤&&网友分享于:&&浏览:0次在Unity3D中加载外部图片的两种方法
喜欢我的博客请记住我的名字:秦元培,我的博客地址是:
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/
各位朋友大家好,我是秦元培,欢迎大家关注我的博客。最近在做项目的过程中遇到这样的一个需求:玩家可以在游戏过程中进行实时存档,在存档过程中会保存当前游戏进度,同时会截取当前游戏画面并加载到游戏存档界面中。当下一次进入游戏的时候,将读取本地存档图片并加载到游戏界面中。这在单机游戏中是特别常见的一种功能,这里主要有两个关键点。首先是截取游戏画面,这个问题大家可以在《Unity3D游戏开发之截屏保存精彩瞬间》这篇文章中找到答案。其次是从本地加载图片,因为这里要保证可读可写,因此传统的Resources.Load()方式和AssetBundle方式均无法实现这样的功能。那么怎样从外部加载图片到游戏中,这就是我们今天要讨论的内容啦。好了,这里介绍两种方法来实现这一目的。
喜闻乐见的WWW方式
喜闻乐见的WWW方式之所以喜闻乐见,这是因为这是我们最为熟悉的一种,我们都知道通过WWW可以从网络上加载文本、图片、音频等形式的内容,那么通过WWW能否加载本地外部(相对于应用程序)资源呢?答案是肯定的,这是因为WWW可以支持http和file两种协议。我们通常接触到的WWW默认都是指http协议,现在我们来说说file协议,该协议可以用来访问本地资源(绝对路径)。例如我们希望加载文件D:\TestFile\pic001.png这个文件,则此时对应的C#脚本为:
WWW www = new WWW("file://D:\\TestFile\\pic001.png);
if(www != null && string.IsNullOrEmpty(www.error))
Texture texture=www.
注意到这里出现了yield return结构,这表示这里使用到了协程,因此我们需要付出的代价就是需要在项目中使用StartCoroutine等协程相关的方法来调用这些协程。虽然在Unity3D中使用协程是件简单的事情,可是如果我们随随便便地使用协程而不注意去维护这些协程,那么这些让我们引以为傲的简单代码可能就会变成我们痛苦不堪的无尽深渊。
亘古不变的传统IO方式
好了,下面我们隆重推出亘古不变的传统IO方式,这种方式相信大家都没有接触过,所以这里将这种方法和大家分享。既然是传统的IO方式,那么无非就是各种IO流的处理啦。好,我们一起来看下面这段代码:
FileStream fileStream = new FileStream(screen, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, (int)fileStream.Length);
fileStream.Close();
fileStream.Dispose();
fileStream = null;
int width=800;
int height=640;
Texture2D texture = new Texture2D(width, height);
texture.LoadImage(bytes);
可以看到在使用这种方式读取图片文件的时候主要是将图片文件转化为byte[]数组,再利用Texture2D的LoadImage方法转化为Unity3D中的Texture2D。这种方法需要在创建过程中传入图片的大小,在这里我们创建了一张800X640的图片。经过博主的研究发现,这种方式加载外部图片相对于使用WWW加载外部图片效率更高,所以如果大家遇到类似的需求,博主个人推荐大家使用这种方式进行加载。
到目前为止我们解决了如何从外部加载图片到Unity3D中,现在我们回到最开始的问题,我们从外部读取到这些图片以后需要将它们加载到游戏界面中。比如当我们使用UGUI的时候,UGUI中的Image控件需要一个Sprite来作为它的填充内容,那么此时我们就需要将Texture转化为Sprite.号了,下面我们给出一个简单的例子:
using UnityE
using System.C
using UnityEngine.UI;
using System.IO;
public class TestLoading : MonoBehaviour
void Start ()
image = this.transform.Find("Image").GetComponent&Image&();
this.transform.Find("LoadByWWW").GetComponent&Button&().onClick.AddListener
delegate(){LoadByWWW();}
this.transform.Find("LoadByIO").GetComponent&Button&().onClick.AddListener
delegate(){LoadByIO();}
以IO方式进行加载
private void LoadByIO()
double startTime = (double)Time.
FileStream fileStream = new FileStream("D:\\test.jpg", FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, (int)fileStream.Length);
fileStream.Close();
fileStream.Dispose();
fileStream = null;
int width = 300;
int height = 372;
Texture2D texture = new Texture2D(width, height);
texture.LoadImage(bytes);
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
image.sprite =
startTime=(double)Time.time-startT
Debug.Log("IO加载用时:" + startTime);
以WWW方式进行加载
private void LoadByWWW()
StartCoroutine(Load());
IEnumerator Load()
double startTime = (double)Time.
WWW www = new WWW("file://D:\\test.jpg");
yield return
if(www != null && string.IsNullOrEmpty(www.error))
Texture2D texture=www.
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
image.sprite =
startTime = (double)Time.time - startT
Debug.Log("WWW加载用时:" + startTime);
现在我们运行程序可以发现两种方式均可以让图片加载进来,为了对比两种方式在执行效率上的高低,我们在脚本中加入了相关代码,通过对比可以发现使用IO方式加载一张227k的图片需要的时间为0s,而使用WWW方式加载需要0.0185s,因此传统的IO方式具有更高的效率,建议大家在遇到这类问题时尽可能地使用这种方式。好了,今天的内容就是这样啦,欢迎大家在我的博客中留言、欢迎大家关注和支持我的博客,谢谢大家!
版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明本文作者及出处,谢谢!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有}

我要回帖

更多关于 unity 截屏保存到相册 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信