我有一个字节数组[],图像是字节数组,是否可以通过直接变换字节数组来更改图像的大小?
答案 0 :(得分:0)
这取决于ot字节的格式[]。如果图像是JPG或PNG,则不能通过直接转换来更改其大小,需要将其加载到纹理上,并进行blit处理并从rendertexture抓取。
如果数据是原始数据,则可以调整大小,但不太可能产生良好的结果。您可以创建一个新数组,并在与新坐标对应的点上复制值(通过最近的邻居采样或通过实施某种插值引擎)。
答案 1 :(得分:0)
这里是一个更改大小并保存到磁盘以进行检查的示例。 以我为例,您可以改进。
public class Resize : MonoBehaviour {
[SerializeField]
Sprite m_InSprite;
[SerializeField]
int width;
[SerializeField]
int height;
[ContextMenu("RESIZE+++")]
public void Test()
{
Texture2D tex = GetResizeText(m_InSprite.texture);
File.WriteAllBytes(@"d:\test.png", tex.EncodeToPNG());
}
public Texture2D GetResizeText(Texture2D oldTex)
{
Func<Texture2D, int, int, Color> convert = delegate (Texture2D tex, int X, int Y)
{
float scaleI = tex.width / (float)width;
float scaleJ = tex.height / (float)height;
int I = (int)(scaleI * X);
int J = (int)(scaleJ * Y);
scaleI = (scaleI < 1) ? 1 : scaleI;
scaleJ = (scaleJ < 1) ? 1 : scaleJ;
int lengthI = (int)scaleI + I;
int lengthJ = (int)scaleJ + J;
List<Color> colors = new List<Color>();
for (int i = I; i < lengthI; i++)
{
for (int j = J; j < lengthJ; j++)
{
colors.Add(tex.GetPixel(i, j));
}
}
//TO DO
//here you need to find the median of the List colors, but I was too lazy
int length = colors.Count;
int m1 = length / 2;
return colors[m1];
};
Texture2D texResize = new Texture2D(width, height);
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
Color col = convert(oldTex, x, y);
texResize.SetPixel(x, y, col);
}
}
return texResize;
}
}