Unity3d 如何复制原始图像的一部分

Unity3d 如何复制原始图像的一部分,unity3d,Unity3d,我想将原始图像的选定部分复制到另一个图像 我得到了起始位置和结束位置的百分比,通过它我可以计算出宽度的起始位置和结束位置 如何将所选零件复制到另一个原始图像?假设它是纹理2D,可以执行以下操作: 计算纹理开始/结束X(dX) 创建一个新的纹理2D(B),大小为dX和全Y 调用A.GetPixels() 在阵列上迭代,将像素复制到新纹理 应用于新纹理 伪代码: var aPixels = aTexture.GetPixels(); var bWidth = endX - startX; var b

我想将原始图像的选定部分复制到另一个图像

我得到了起始位置和结束位置的百分比,通过它我可以计算出宽度的起始位置和结束位置


如何将所选零件复制到另一个原始图像?

假设它是
纹理2D
,可以执行以下操作:

  • 计算纹理开始/结束X(dX)
  • 创建一个新的纹理2D(B),大小为dX和全Y
  • 调用A.GetPixels()
  • 在阵列上迭代,将像素复制到新纹理
  • 应用于新纹理
  • 伪代码:

    var aPixels = aTexture.GetPixels();
    var bWidth = endX - startX;
    var bTexture = new Texture2D(bWidth, endY);
    var bPixels = bTexture.GetPixels();
    
    for (int x = startX; x < endX; x++) 
    { 
      for (int y = 0; y < endY; y++) 
      { 
        var aIndex = x + y * A.width;
        var bIndex = (x - startX) + y * bWidth;
        bPixels[bIndex] = aPixels[aIndex];
      } 
    }
    
    bTexture.Apply();
    
    var aPixels=aTexture.GetPixels();
    var bWidth=endX-startX;
    var bTexture=新纹理2d(bWidth,endY);
    var bPixels=bTexture.GetPixels();
    用于(int x=startX;x

    请注意,我的代码很可能无法工作;当我在手机上输入时。

    通常,图像处理对于CPU来说是一个昂贵的过程,所以我不建议在Unity中使用它,
    但无论如何,对于您的图像,在这种特殊情况下,我认为您可以通过更改材质中纹理的大小和偏移来裁剪图像。

    更新:
    这是我提到的一个例子:
    您可以根据在纹理上拖动鼠标的位置计算平铺和偏移。我找到了这个。 您可以将开始坐标、宽度和高度设置为GetPixels()

    void Start(){
    公共纹理2D纹理;
    Color[]c=mTexture.GetPixels(startX、startY、width、height);
    纹理2d m2Texture=新纹理2d(宽度、高度);
    m2Texture.SetPixels(c);
    m2Texture.Apply();
    gameObject.GetComponent().material.mainTexture=m2Texture;
    }
    ```
    
    有道理,但无法使用它。当你有机会的时候,你能详细写一下吗?
    void Start () {
         public Texture2D mTexture;
         Color[] c = mTexture.GetPixels (startX, startY, width, height);
         Texture2D m2Texture = new Texture2D (width, height);
         m2Texture.SetPixels (c);
         m2Texture.Apply ();
         gameObject.GetComponent<MeshRenderer> ().material.mainTexture = m2Texture;
     }
    ```