调整图片的字节数[]

时间:2019-01-30 14:14:09

标签: c# unity3d

我有一个字节数组[],图像是字节数组,是否可以通过直接变换字节数组来更改图像的大小?

2 个答案:

答案 0 :(得分:0)

这取决于ot字节的格式[]。如果图像是JPG或PNG,则不能通过直接转换来更改其大小,需要将其加载到纹理上,并进行blit处理并从rendertexture抓取。

如果数据是原始数据,则可以调整大小,但不太可能产生良好的结果。您可以创建一个新数组,并在与新坐标对应的点上复制值(通过最近的邻居采样或通过实施某种插值引擎)。

https://en.wikipedia.org/wiki/Image_scaling

答案 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;
    }
}