Explanation.
현재 화면을 capture한뒤 mosaic처리.
잠깐 시간이나서 구현.
최적화 X(개선필요)
모자이크 처리방식 매우 비효율적.(개선필요)
모자이크 처리방식 매우 비효율적.(개선필요)
어디 쓰일지도 의문.
정리해두고 추후 필요시 사용.
CaptureAndMosaic.cs
using UnityEngine;
using System.Collections;
public class CaptureAndMosaic : MonoBehaviour
{
int height = Screen.height;
int width = Screen.width;
Texture2D captureTexture;
float startTime;
bool draw = false;
void Start()
{
startTime = Time.realtimeSinceStartup;
StartCoroutine(getScreenAndMosaic());
}
void OnGUI()
{
if (captureTexture != null)
GUI.DrawTexture(new Rect(0, 0, captureTexture.width, captureTexture.height), captureTexture);
if (!string.IsNullOrEmpty(log))
GUI.Label(new Rect(100, 100, 100, 100), log);
}
bool end = false;
IEnumerator getScreenAndMosaic()
{
yield return new WaitForEndOfFrame();
captureTexture = new Texture2D(width, height, TextureFormat.RGB24, true);
captureTexture.ReadPixels(new Rect(0, 0, width, height), 0, 0, true);
captureTexture.Apply();
StartCoroutine(makeNoise());
}
IEnumerator makeNoise()
{
yield return StartCoroutine(makeNoiseTexture(40));
}
int index = 0;
IEnumerator makeNoiseTexture(int dist)
{
int distDiv = dist;
int nBoxSize = width / distDiv;
int x = 0;
int y = 1;
Color[] colors = new Color[nBoxSize * nBoxSize];
Color preColor = Color.white;
int mid = height / (nBoxSize * y);
while (nBoxSize * y < height)
{
preColor = captureTexture.GetPixel(0 + x * nBoxSize, height - nBoxSize * y);
for (int i = 0; i < colors.Length; ++i)
colors[i] = captureTexture.GetPixel(0 + x * nBoxSize, height - nBoxSize * y);
if (height - nBoxSize * y <= 0)
captureTexture.SetPixels(0 + x * nBoxSize, 0, nBoxSize, nBoxSize, colors);
else
captureTexture.SetPixels(0 + x * nBoxSize, height - nBoxSize * y, nBoxSize, nBoxSize, colors);
++x;
if (x * nBoxSize > width - nBoxSize)
{
x = 0;
++y;
if (y % 3 == 0) // 3행 처리후 apply
{
captureTexture.Apply();
yield return null;
}
}
}
yield return null;
captureTexture.Apply();
log = "mosaic ended Time : " + (Time.realtimeSinceStartup - startTime);
Debug.Log("end");
}
string log = string.Empty;
}
Result.
![]() |
| Before |
![]() |
| After |


0 개의 댓글:
댓글 쓰기