Resize Bytes [] Of Image - PullRequest
       1

Resize Bytes [] Of Image

0 голосов
/ 30 января 2019

У меня есть байтовый массив [], является ли изображение байтовым массивом, есть ли способ изменить размер изображения, но путем непосредственного преобразования байтового массива?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вот пример, который изменяет размер и сохраняет на диск для проверки.Я написал, например, вы можете улучшить.

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;
    }
}
0 голосов
/ 30 января 2019

Зависит от формата байтов [].если изображение является JPG или PNG, чем нет, вы не можете изменить его размер с помощью прямого преобразования, вам нужно загрузить его в текстуру, скопировать и захватить из rendertexture.

Если данные являются необработанными, то да, его можно изменить, но вряд ли даст хорошие результаты.Вы можете создать новый массив и скопировать значения в точках, соответствующих вашей новой координате (путем выборки ближайшего соседа или путем реализации какого-либо механизма интерполяции).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...