ontrolTex = (Texture2D)CurrentSelect.gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_Control"); byte[] saveData = controlTex.GetRawTextureData(); for (int i = 0; i < saveData.Length; i++) { if (saveData[i] == 255) { saveData[i] = 1; } else if(saveData[i] > 0 && saveData[i] < 255) { saveData[i] = 1; } else { saveData[i] = 0; } } 将这个生成的byte数据加载到Texture2发现颜色像素是相反的,倒着输出在上面的
时间: 2024-02-10 08:17:40 浏览: 16
这个问题可能是由于你在处理字节数据时没有考虑到Texture2D的像素排列方式。Texture2D中的像素默认是从左下角开始排列的,而GetRawTextureData返回的字节数据则是按照从左上角开始排列的。
因此,你需要在处理字节数据时考虑到Texture2D的像素排列方式,可以使用以下代码进行处理:
```csharp
Texture2D controlTex = (Texture2D)CurrentSelect.gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_Control");
byte[] saveData = controlTex.GetRawTextureData();
int width = controlTex.width;
int height = controlTex.height;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int index = (height - y - 1) * width + x;
if (saveData[index] == 255)
{
saveData[index] = 1;
}
else if (saveData[index] > 0 && saveData[index] < 255)
{
saveData[index] = 1;
}
else
{
saveData[index] = 0;
}
}
}
Texture2D loadedTex = new Texture2D(width, height);
loadedTex.LoadRawTextureData(saveData);
loadedTex.Apply();
```
这段代码中,我们首先获取Texture2D的宽度和高度,然后按照从左下角到右上角的顺序遍历像素,并根据需要对像素进行处理。在处理像素时,我们需要将从GetRawTextureData中获取到的字节数据根据像素排列方式重新映射到Texture2D中,具体实现方式是先计算像素在字节数组中的索引,然后再通过`(height - y - 1) * width + x`的方式将像素映射到Texture2D中。最后将处理后的字节数据加载到新的Texture2D对象中即可。