Save
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // (1) 스크린샷용 카메라를 준비합니다. screenShotCamera.gameObject.SetActive(true); // (2) 화면 크기를 지정합니다. Vector2 screenSize = new Vector2(Screen.width, Screen.height); // (3) 저장할 이미지의 크기를 지정합니다.(화면 크기 그대로 저장을 원하면 screenSize로 대체하시면 됩니다.) Vector2 imageSize = new Vector2( cat.pictureSize.x / cameraSize.x * screenSize.x, cat.pictureSize.y / cameraSize.y * screenSize.y); // (4) 저장할 이미지의 Offset을 지정합니다. Vector2 imageOffset = cat.pictureOffset; imageOffset.x += cameraSize.x * 0.5f - transform.position.x; imageOffset.y += cameraSize.y * 0.5f - transform.position.y; // (5) OpenGL의 경우 y축이 Upwards이고, 나머지의 경우 y축이 Downwards입니다. if (SystemInfo.graphicsDeviceType != UnityEngine.Rendering.GraphicsDeviceType.OpenGL2 && SystemInfo.graphicsDeviceType != UnityEngine.Rendering.GraphicsDeviceType.OpenGLCore && SystemInfo.graphicsDeviceType != UnityEngine.Rendering.GraphicsDeviceType.OpenGLES2 && SystemInfo.graphicsDeviceType != UnityEngine.Rendering.GraphicsDeviceType.OpenGLES3) imageOffset.y = cameraSize.y - imageOffset.y; imageOffset.x *= screenSize.x / cameraSize.x - imageSize.x * 0.5f; imageOffset.y *= screenSize.y / cameraSize.y - imageSize.y * 0.5f; // (6) RenderTexture에 screenShotCamera가 보고 있는 화면을 Render 합니다. RenderTexture rt = new RenderTexture((int)screenSize.x, (int)screenSize.y, 32); screenShotCamera.targetTexture = rt; screenShotCamera.Render(); RenderTexture.active = rt; // (7) RenderTexture를 Texture2D로 옮깁니다. Texture2D cache = new Texture2D((int)imageSize.x, (int)imageSize.y, TextureFormat.ARGB32, false); cache.filterMode = FilterMode.Bilinear; cache.ReadPixels(new Rect(imageOffset, imageSize), 0, 0); // (8) 저장합니다. byte[] bytes = cache.EncodeToPNG(); string filename = Application.persistentDataPath + "/filename.png"; System.IO.File.WriteAllBytes(filename, bytes); // (9) 뒷정리합니다. screenShotCamera.targetTexture = null; RenderTexture.active = null; Destroy(rt); screenShotCamera.gameObject.SetActive(false); | cs |
- 스크린샷 카메라를 준비합니다. MainCamera를 사용해도 무방하다면 MainCamera를 사용합니다.
- 화면 크기를 지정합니다.
- 저장할 이미지의 크기를 지정합니다. (특정 영역을 저장할 때 사용합니다. 그것이 아니라면 화면 크기와 동일하게 지정합니다.)
- 저장할 이미지의 Offset을 지정합니다.
- 참고 : http://chessire.tistory.com/entry/%EB%A0%8C%EB%8D%94%ED%85%8D%EC%8A%A4%EC%B3%90-%EC%A2%8C%ED%91%9C%EA%B3%84Render-Texture-coordinates
- RenderTexture에 screenShotCamera가 보고 있는 화면을 Render 합니다.
- RenderTexture를 Texture2D로 옮깁니다.
- 저장합니다.
- 뒷정리합니다.
Load
1 2 3 4 5 | byte[] bytes = System.IO.File.ReadAllBytes(Application.persistentDataPath + "/filename.png"); Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); texture.filterMode = FilterMode.Bilinear; texture.LoadImage(bytes); Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f)); | cs |
'프로그래밍 > 예전글' 카테고리의 다른 글
Unity 컴퍼넌트 복사(Copy component) (1) | 2016.07.28 |
---|---|
[라즈베리파이, 리눅스] Transmission으로 토렌트머신 세팅하기 (0) | 2016.06.17 |
렌더텍스쳐 좌표계(Render Texture coordinates) (0) | 2016.06.15 |
adb에서 protocol fault couldn't read status에러가 발생할 경우 (0) | 2016.06.15 |
[라즈베리파이, 리눅스] Apache를 이용한 웹서버 세팅 (0) | 2016.05.30 |