Unity中屏幕截图实现

24 篇文章 1 订阅

简介

本文整理一下Unity进行截图的处理方式及获取屏幕宽高的使用方式,同时还添加了在Editor中如何得到对屏幕的截图处理,并没有特别深入的技术点,有需要的可以参考一下

声明

本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。

如果您进行转载,请标明出处。

Unity技术 Unity中屏幕截图实现(http://www.liyubin.com/articles/2020/11/16/1605517934456.html)

获取屏幕宽高

Unity中的Screen类提供了获取屏幕宽高的API,为分别:

  • Screen.Width/Height

    获取到的是播放器窗口的宽度与高度

    如果在全屏模式下等于Screen.currentResolution.width/height获取到的结果

    如果处于Editor模式下结果是Game窗口的宽度与高度

  • Screen.currentResolution.width/height

    获取到的是桌面分辨率的宽度与高度

    如果在PC下有多屏幕下获取到的是主屏幕的宽度与高度

ScreenCapture的使用

Unity中的ScreenCapture

  • 截图存储到指定的文件中

    public static void CaptureScreenshot(string filename, int superSize);
    
    superSize表示截图放大比例,例如:superSize设置为2,得到的截图为播放器窗口宽度和高度的2
  • 截图输出到Texture中

    public static Texture2D CaptureScreenshotAsTexture(int superSize);
    
    superSize表示截图放大比例,例如:superSize设置为2,得到的截图为播放器窗口宽度和高度的2
  • 截图存储到RT中

    public static void CaptureScreenshotIntoRenderTexture(RenderTexture renderTexture);
    

PS:上述所有的截图均是对播放器窗口的截图,如果是在Editor中结果是对Game窗口的截图

Editor下对桌面进行截图

某些时候有可能需要在Editor中针对桌面进行截图的处理,Unity的Editor内部也提供了对应的API

Color[] pixels = UnityEditorInternal.InternalEditorUtility.ReadScreenPixel(position, width, height);

具体的使用方式如下图:

public static Texture GrabScreenSwatch(Rect rect)
{
    int width = (int)rect.width;
    int height = (int)rect.height;
    int x = (int)rect.x;
    int y = (int)rect.y;
    Vector2 position = new Vector2(x, y);

    Color[] pixels = UnityEditorInternal.InternalEditorUtility.ReadScreenPixel(position, width, height);

    Texture2D texture = new Texture2D(width, height);
    texture.SetPixels(pixels);
    texture.Apply();
    
    return texture;
}

使用方式:

Texture texture = GrabScreenSwatch(new Rect(0,0,Screen.currentResolution.width,Screen.currentResolution.height));

Texture2D生成图片文件

Unity的UnityEngine.ImageConversion类中对Texture2D进行了扩展,添加了可以生成图片的接口。

public static byte[] EncodeToEXR(this Texture2D tex, Texture2D.EXRFlags flags);
public static byte[] EncodeToEXR(this Texture2D tex);
public static byte[] EncodeToJPG(this Texture2D tex, int quality);
public static byte[] EncodeToPNG(this Texture2D tex);
public static byte[] EncodeToTGA(this Texture2D tex);
public static bool LoadImage(this Texture2D tex, byte[] data, bool markNonReadable);
public static bool LoadImage(this Texture2D tex, byte[] data);

额外的提示

对于上述描述中的方式,最好自己真实的测试一下,看看各个接口处理方式上的不同

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值