如何复制部分原始图像

问题描述 投票:0回答:1

enter image description here

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

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

我怎么能复制选定的部分到另一个原始图像?

unity3d
1个回答
0
投票

假设它是一个 Texture2D您可以做以下工作。

  1. 计算一个纹理开始X (dX)
  2. 创建一个新的Texture2D(B),大小为dX,全称Y。
  3. 呼叫 A.GetPixels()
  4. 迭代数组,将像素复制到新的纹理上。
  5. 应用在新的纹理上

伪代码。

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();

请注意,我的代码很可能无法使用,因为我是在手机上打的。


0
投票

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

更新。这是我提到的一个例子。enter image description here你可以根据鼠标在纹理上拖动的位置来计算Tile和Offset. (查看这里)


0
投票

我发现这个.你可以用GetPixels()来设置起始坐标和宽高。

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;
 }
```
© www.soinside.com 2019 - 2024. All rights reserved.