2017년 11월 6일 월요일

Unity Texture -> RenderTexture -> Texture2D -> Color32[] 로 변환의 험란한 길

영상 처리 작업을 하던 중 Color32[]를 이용할 일이 있었는데.
Unity 로 이걸 할라 하니 이래저래 삽질이 있었다.

적당히 구글링 해보니 Texture 를 Texture2D.ReadPixel 을 이용해서 Texture2D로 읽는 팁이 있었는데,
막상 해보니 그리는 프레임에 이걸 하면 동작하지 않는다.

좀 멀리 돌아온 감이 있는데,
텍스쳐를 렌더 텍스쳐로 바꾸고 이걸 텍스쳐2D로 만든 다음에 Colors32를 들고 오면 된다.

하루종일 삽질한 것 치고 우아하지 않아서 고민하다가..
지쳐서 그냥 이쯤에서 마무리.

C#으로는 한계가 있는 느낌.. 하아...


    private Texture2D _texture2D;
    private Texture _mainTexture;
    private RenderTexture _renderTexture;

    public Color32[] getTexture2D_AsPixel32()
    {
        if (_mainTexture == null)
            _mainTexture = _liveCamera.OutputTexture;

        if (_texture2D == null)
        {
            _texture2D = new Texture2D(_mainTexture.width, _mainTexture.height, TextureFormat.RGBA32, false);
        }
        //RenderTexture currentRT = RenderTexture.active;

        if (_renderTexture == null)
            _renderTexture = new RenderTexture(_mainTexture.width, _mainTexture.height, 32);

        // mainTexture 의 픽셀 정보를 renderTexture 로 카피
        Graphics.Blit(_mainTexture, _renderTexture);

        // renderTexture 의 픽셀 정보를 근거로 texture2D 의 픽셀 정보를 작성
        RenderTexture.active = _renderTexture;

        _texture2D.ReadPixels(new Rect(0, 0, _renderTexture.width, _renderTexture.height), 0, 0);
        _texture2D.Apply();

        return _texture2D.GetPixels32();

    }

댓글 1개:

  1. RenderTexture 에서는 _texture2D.ReadPixels 을 바로 할 수 있는게 팁..

    답글삭제