国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity Texture2D的裁剪、鏡像、翻轉(zhuǎn)、縮放、合并、分辨率

這篇具有很好參考價值的文章主要介紹了Unity Texture2D的裁剪、鏡像、翻轉(zhuǎn)、縮放、合并、分辨率。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本人最近做了一個拍照并打印的程序,使用到了多種圖片編輯功能,現(xiàn)在羅列一下,希望對大家有所幫助。

裁剪,將貼圖上的某個區(qū)域裁剪?

    /// <summary>
    /// 裁剪Texture2D
    /// </summary>
    /// <param name="originalTexture"></param>
    /// <param name="offsetX"></param>
    /// <param name="offsetY"></param>
    /// <param name="originalWidth"></param>
    /// <param name="originalHeight"></param>
    /// <returns></returns>
    public static Texture2D ScaleTextureCutOut(Texture2D originalTexture, int offsetX,int offsetY, float originalWidth, float originalHeight)
    {
        Texture2D newTexture = new Texture2D(Mathf.CeilToInt(originalWidth), Mathf.CeilToInt(originalHeight));
        int maxX = originalTexture.width - 1;
        int maxY = originalTexture.height - 1;
        for (int y = 0; y < newTexture.height; y++)
        {
            for (int x = 0; x < newTexture.width; x++)
            {
                float targetX = x + offsetX;
                float targetY = y + offsetY;
                int x1 = Mathf.Min(maxX, Mathf.FloorToInt(targetX));
                int y1 = Mathf.Min(maxY, Mathf.FloorToInt(targetY));
                int x2 = Mathf.Min(maxX, x1 + 1);
                int y2 = Mathf.Min(maxY, y1 + 1);

                float u = targetX - x1;
                float v = targetY - y1;
                float w1 = (1 - u) * (1 - v);
                float w2 = u * (1 - v);
                float w3 = (1 - u) * v;
                float w4 = u * v;
                Color color1 = originalTexture.GetPixel(x1, y1);
                Color color2 = originalTexture.GetPixel(x2, y1);
                Color color3 = originalTexture.GetPixel(x1, y2);
                Color color4 = originalTexture.GetPixel(x2, y2);
                Color color = new Color(Mathf.Clamp01(color1.r * w1 + color2.r * w2 + color3.r * w3 + color4.r * w4),
                                        Mathf.Clamp01(color1.g * w1 + color2.g * w2 + color3.g * w3 + color4.g * w4),
                                        Mathf.Clamp01(color1.b * w1 + color2.b * w2 + color3.b * w3 + color4.b * w4),
                                        Mathf.Clamp01(color1.a * w1 + color2.a * w2 + color3.a * w3 + color4.a * w4)
                                        );
                newTexture.SetPixel(x, y, color);
            }
        }
        newTexture.anisoLevel = 2;
        newTexture.Apply();
        return newTexture;
    }

?縮放,縮放和放大原有貼圖

/// <summary>
/// 縮放Textur2D
/// </summary>
/// <param name="source"></param>
/// <param name="targetWidth"></param>
/// <param name="targetHeight"></param>
/// <returns></returns>
public static Texture2D ScaleTexture(Texture2D source, float targetWidth, float targetHeight)
{
        Texture2D result = new Texture2D((int)targetWidth, (int)targetHeight, source.format, false);

        float incX = (1.0f / targetWidth);
        float incY = (1.0f / targetHeight);

        for (int i = 0; i < result.height; ++i)
        {
            for (int j = 0; j < result.width; ++j)
            {
                Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);
                result.SetPixel(j, i, newColor);
            }
        }

        result.Apply();
        return result;
}

?水平鏡像

//水平翻轉(zhuǎn)
    public static Texture2D HorizontalFlipTexture(Texture2D texture)
    {
        //得到圖片的寬高
        int width = texture.width;
        int height = texture.height;

        Texture2D flipTexture = new Texture2D(width, height);

        for (int i = 0; i < width; i++)
        {
            flipTexture.SetPixels(i, 0, 1, height, texture.GetPixels(width - i - 1, 0, 1, height));
        }
        flipTexture.Apply();

        return flipTexture;
    }

?垂直鏡像

// 垂直翻轉(zhuǎn)
    public static Texture2D VerticalFlipTexture(Texture2D texture)
    {
        //得到圖片的寬高
        int width = texture.width;
        int height = texture.height;

        Texture2D flipTexture = new Texture2D(width, height);
        for (int i = 0; i < height; i++)
        {
            flipTexture.SetPixels(0, i, width, 1, texture.GetPixels(0, height - i - 1, width, 1));
        }
        flipTexture.Apply();
        return flipTexture;
    }

?逆時針旋轉(zhuǎn)90度

/// <summary>
    /// 圖片逆時針旋轉(zhuǎn)90度
    /// </summary>
    /// <param name="src">原圖片二進制數(shù)據(jù)</param>
    /// <param name="srcW">原圖片寬度</param>
    /// <param name="srcH">原圖片高度</param>
    /// <param name="desTexture">輸出目標圖片</param>
    public static Texture2D RotationLeft90(Color32[] src, int srcW, int srcH)
    {
        Color32[] des = new Color32[src.Length];
        Texture2D desTexture = new Texture2D(srcH, srcW);
        //if (desTexture.width != srcH || desTexture.height != srcW)
        //{
        //    desTexture.Resize(srcH, srcW);
        //}

        for (int i = 0; i < srcW; i++)
        {
            for (int j = 0; j < srcH; j++)
            {
                des[i * srcH + j] = src[(srcH - 1 - j) * srcW + i];
            }
        }

        desTexture.SetPixels32(des);
        desTexture.Apply();
        return desTexture;
    }

順時針旋轉(zhuǎn)90度?

/// <summary>
    /// 圖片順時針旋轉(zhuǎn)90度
    /// </summary>
    /// <param name="src">原圖片二進制數(shù)據(jù)</param>
    /// <param name="srcW">原圖片寬度</param>
    /// <param name="srcH">原圖片高度</param>
    /// <param name="desTexture">輸出目標圖片</param>
    public static Texture2D RotationRight90(Color32[] src, int srcW, int srcH)
    {

        Color32[] des = new Color32[src.Length];
        Texture2D desTexture = new Texture2D(srcH, srcW);

        for (int i = 0; i < srcH; i++)
        {
            for (int j = 0; j < srcW; j++)
            {
                des[(srcW - j - 1) * srcH + i] = src[i * srcW + j];
            }
        }

        desTexture.SetPixels32(des);
        desTexture.Apply();
        return desTexture;
    }

兩張貼圖合并,可以實現(xiàn)水印等功能,該代碼是我實現(xiàn)3行3列9張相同照片排列?

    /// <summary>
    /// 兩張圖合并
    /// </summary>
    /// <param name="_baseTexture2D"></param>
    /// <param name="_texture2D"></param>
    /// <param name="_x"></param>
    /// <param name="_y"></param>
    /// <param name="_w"></param>
    /// <param name="_h"></param>
    /// <returns></returns>
    public static Texture2D MergeImage(Texture2D _baseTexture2D, Texture2D _texture2D,int _x,int _y,int _w,int _h)
    {
        //取圖
        Color32[] color = _texture2D.GetPixels32(0);
        for (int j = 0; j < 3; j++)
        {
            for (int i = 0; i < 3; i++)
            {
                _baseTexture2D.SetPixels32(_x + i * (_texture2D.width+ _w), _y + j * (_texture2D.height+_h), _texture2D.width, _texture2D.height, color); //寬度
            }
        }
        //應(yīng)用
        _baseTexture2D.Apply();
        return _baseTexture2D;
    }

修改圖片的水平和垂直分辨率(像素/英寸,每英寸距離的圖像包含的像素數(shù)目。)

Bitmap操作需要用到System.Drawing.dll,請自行下載!文章來源地址http://www.zghlxwxcb.cn/news/detail-558867.html

    /// <summary>
    /// 修改圖片水平和垂直像素量
    /// </summary>
    public static Texture2D SetPictureResolution(string _path)
    {
        Bitmap bm = new Bitmap(_path);
        bm.SetResolution(300, 300);
        string _idPath = Application.persistentDataPath + "/";
        string _name = "print.jpg";
        bm.Save(_idPath + _name, ImageFormat.Jpeg);
        Texture2D tex = loadTexture(_idPath, _name);
        File.WriteAllBytes(Application.persistentDataPath + "/aa.jpg", tex.EncodeToJPG());
        bm.Dispose();
        return tex;
    }

到了這里,關(guān)于Unity Texture2D的裁剪、鏡像、翻轉(zhuǎn)、縮放、合并、分辨率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Cesium 1.02.0 及以上版本下自定義材質(zhì)報錯:[Cesium WebGL] Fragment shader compile log: ERROR: 0:8: ‘texture2D‘

    Cesium 1.02.0 及以上版本下自定義材質(zhì)報錯:[Cesium WebGL] Fragment shader compile log: ERROR: 0:8: ‘texture2D‘

    2023年4月19日更新— 搞了一個 Cesium 鏡像,歡迎使用:沙盒示例 和 API 在看到 Cesium 官方更新的日志, 最新版(1.103.0) 支持平滑縮放,于是升級嘗試一下。 結(jié)果偶然發(fā)現(xiàn),之前寫的 墻體動態(tài)效果報錯 ,經(jīng)過調(diào)試,找到原因, Cesium 新版對 WebGL2 支持有變化 ,這里記錄一下。

    2024年02月11日
    瀏覽(117)
  • 數(shù)字圖像處理 matlab圖像的幾何運算 實驗三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    數(shù)字圖像處理 matlab圖像的幾何運算 實驗三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    原圖: 讀取原圖(這里我的圖片名字是atm.png): 我們先說原理,圖像旋轉(zhuǎn)的本質(zhì)是向量的旋轉(zhuǎn)。 矩陣乘法的實質(zhì)是進行線性變換,因此對一個向量進行旋轉(zhuǎn)操作也可以通過矩陣和向量相乘的方式進行。 因為圖像都是通過二維矩陣存放的(單通道),所以對圖像進行旋轉(zhuǎn)時

    2024年02月07日
    瀏覽(25)
  • Unity2D-使人物翻轉(zhuǎn)的方法

    方法①:使用組件: SpriteRenderer 使用 GetAxis() 和 GetAxisRaw() 沒有區(qū)別 方法②:使用組件: Transform 情況1:使用 GetAxisRaw() ;沒有剎車效果,及翻轉(zhuǎn)過程沒有過渡, m o v e F a c t o r moveFactor m o v e F a c t or 取-1,1,0 情況1:使用 GetAxis() ;有剎車效果,及翻轉(zhuǎn)過程有過渡, m o v e F a c t

    2024年02月12日
    瀏覽(24)
  • Unity鍵盤左右鍵(AD鍵)控制2D角色的左右朝向/翻轉(zhuǎn)

    Unity鍵盤左右鍵(AD鍵)控制2D角色的左右朝向/翻轉(zhuǎn)

    ? ? ? ? 第一種方法是利用 Input.GetAxis(\\\"Horizontal\\\") 的值得范圍。Input.GetAxis(\\\"Horizontal\\\")的范圍是[-1,1]。 Input.GetAxis(\\\"Horizontal\\\")的值大于0時,向右轉(zhuǎn);Input.GetAxis(\\\"Horizontal\\\")小于0時,向左轉(zhuǎn) 將該腳本掛在要控制的角色身上 注意:使用此方法時要保證放在unity中的角色的scale沒有改變

    2024年02月03日
    瀏覽(27)
  • 19. Unity - 2D游戲開發(fā)小記02 --- 偽透視圖、2D物體碰撞、瓦片地圖碰撞、素材縮放平鋪

    19. Unity - 2D游戲開發(fā)小記02 --- 偽透視圖、2D物體碰撞、瓦片地圖碰撞、素材縮放平鋪

    1. 偽視圖 在2D游戲開發(fā)當中,當角色移動時,會發(fā)生物體與物體之間的前后遮擋。2D視圖中的前后關(guān)系是由 Y 軸決定,y 值越小物體越靠前。unity的渲染應(yīng)開啟根據(jù) y 值的大小進行渲染才能保證正確的遮擋效果,在菜單欄 Editor–project setting -- Graphic 中按照下圖方式進行設(shè)置:

    2024年02月02日
    瀏覽(51)
  • Unity2D 實現(xiàn)UGUI滾動鼠標滑輪以鼠標位置點為中心縮放圖片

    Unity2D 實現(xiàn)UGUI滾動鼠標滑輪以鼠標位置點為中心縮放圖片

    ?先放參考文章: Unity3d UGUI以鼠標位置點為中心縮放圖片(含項目源碼) https://blog.csdn.net/qq_33789001/article/details/117749837 再放實現(xiàn)效果: 說說事情緣由,項目需要用到這個效果,所以上網(wǎng)找了個參考文章,后來不知道為什么失效了,所以想著自己改改,看看是什么毛病。 貼原

    2024年02月11日
    瀏覽(20)
  • opencv 圖像的縮放(放大,縮小),翻轉(zhuǎn),旋轉(zhuǎn)

    opencv 圖像的縮放(放大,縮小),翻轉(zhuǎn),旋轉(zhuǎn) opencv 最常用的圖像縮放方法是使用 cv2::resize() 函數(shù),它需要指定輸出圖像的大小,和插值算法; opencv 最常用的圖像翻轉(zhuǎn)方法是使用 cv::flip() 函數(shù),它需要指定圖像翻轉(zhuǎn)方式; opencv 最常用的圖像旋轉(zhuǎn)方法是使用 cv::warpAffine() 函數(shù),

    2024年02月07日
    瀏覽(86)
  • Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪

    Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪

    %%------------------------Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪------------------------------- %-------------------頭文件----------------------------- clc ; %清屏幕 clear ; %刪除所有的變量 close all ; %將所有打開的圖片關(guān)掉 %--------------------圖像平移 imtranslate-------------------------- A = imread(\\\'1.jpg\\\') ; subplot(

    2024年02月04日
    瀏覽(25)
  • 【Android】Bitmap圖片旋轉(zhuǎn)、縮放、翻轉(zhuǎn)等變換(90/100)

    【Android】Bitmap圖片旋轉(zhuǎn)、縮放、翻轉(zhuǎn)等變換(90/100)

    自定義BitmapChangeView: 工具類: 布局引用: 應(yīng)用如下: 推薦理由 postman在國內(nèi)使用已經(jīng)越來越困難: 1、登錄問題嚴重 2、Mock功能服務(wù)基本沒法使用 3、版本更新功能已很匱乏 4、某些外力因素導致postman以后能否使用風險較大 出于以上考慮因此筆者自己開發(fā)了一款api調(diào)試開發(fā)工

    2024年02月16日
    瀏覽(21)
  • PHP先等比縮放再無損裁剪圖片【實例源碼】

    很多人在使用程序裁剪圖片時,是在原圖上直接裁剪,這樣的裁剪結(jié)果是使得圖片變得不完整了,理想的做法是先等比縮小圖片,再把多余的部分裁掉,這樣會保留更多的圖片信息。 實現(xiàn)代碼:

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包