Как преобразовать тип «UnityEngine.Color32 []» в «UnityEngine.Sprite» - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь сгенерировать QR-код, используя ZXing.Net, и сначала у меня возникла проблема, когда .Save() не работает из-за ошибки CS1061. Итак, я поцарапал эту идею, затем попытался сохранить .Write() как изображение, а затем отобразить его в единстве, но Unity возвращает ошибку:

Cannot implicitly convert type 'UnityEngine.Color32[]' to 'UnityEngine.Sprite'

Я попытался использовать ответ из здесь , где они использовали Sprite.Create() в качестве решения, но преобразовали Texture2D вместо Color32 [], но я не смог подтвердить, работает ли код для меня, так как код возвращает ошибку, которая:

The type or namespace name 'Image' could not be found

Как я уже сказал, я не смог выяснить, действительно ли работает код или нет. Я не знаю, что вызвало ошибку namespace, поскольку используемый мной скрипт находится под пользовательским интерфейсом изображения.

Вот коды, которые я использую:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using ZXing.QrCode;
using System.Drawing;

public class SampleScript : MonoBehaviour
{

    public Texture2D myTexture;
    Sprite mySprite;
    Image myImage;

    void Main()
    {
        var qrWriter = new BarcodeWriter();
        qrWriter.Format = BarcodeFormat.QR_CODE;

        this.gameObject.GetComponent<SpriteRenderer>().sprite = qrWriter.Write("text");
    }

    public void FooBar()
    {
        mySprite = Sprite.Create(myTexture, new Rect(0.0f, 0.0f, myTexture.width, myTexture.height), new Vector2(0.5f, 0.5f), 100.0f);
        myImage.sprite = mySprite;
    }

    void Start()
    {
        FooBar();
        Main();
    }

Iдо сих пор не проверял этот код, поскольку ошибки должны быть устранены перед запуском.

1 Ответ

1 голос
/ 03 ноября 2019

Первый

Не удалось найти тип или имя пространства имен 'Изображение'

исправлено путем добавления соответствующего пространства имен

using UnityEngine.UI;

в верхней части файла.


Исключение

Не удается неявно преобразовать тип 'UnityEngine.Color32 []' в 'UnityEngine.Sprite'

Не может быть просто "исправлено". Это, как говорит вам исключение: вы не можете неявно конвертировать между этими типами ... даже явно.

 qrWriter.Write("text");

возвращает Color32[].


Что вы можетепопытайтесь создать текстуру, используя эту информацию о цвете НО , вам всегда нужно знать размеры в пикселях целевой текстуры.

Тогда вы можете использовать Texture2D.SetPixels32 как

var texture = new Texture2D(HIGHT, WIDTH);
texture.SetPixels32(qrWriter.Write("text"));
texture.Apply();
this.gameObject.GetComponent<SpriteRenderer>().sprite = Sprite.Create(texture, new Rect(0,0, texture.width, texture.height), Vector2.one * 0.5f, 100);

Возможно, вам также придется активно передавать EncodingOptions, чтобы установить желаемые размеры в пикселях, как показано в этого блога:

using ZXing.Common;

...

BarcodeWriter qrWriter = new BarcodeWriter
{
    Format = BarcodeFormat.QR_CODE,
    Options = new EncodingOptions
    {
        Height = height,
        Width = width
    }
};
Color32[] pixels = qrWriter.Write("text");
Texture2D texture = new Texture2D(width, height);
texture.SetPixels32(pixels);
texture.Apply();

там также можно найти более полезную информацию о многопоточности и масштабировании текстуры и т. Д.

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