該当のソースコード
C#
1public Image image; 2IEnumerator CaptureScreenshot() 3 { 4 int w = Screen.width; 5 int h = Screen.height; 6 Texture2D texture = new Texture2D(w, h, TextureFormat.RGB24, true); 7 yield return new WaitForEndOfFrame(); 8 texture.ReadPixels(new Rect(0, 0, w, h), 0, 0); 9 texture.Apply(); 10 image.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f)); 11 }
やりたいこと
Unityで端末のアスペクト比に関わらず一定のサイズでスクリーンショットが撮りたいです。
撮影したら 固定のサイズ(例えば横幅1280,高さ720とか)のImageに貼り付けます。
そこでどのアスペクト比の端末から撮影しても綺麗にその1280:720のImageに貼り付けたいです。
**Texture2D.ReadPixels()を使用し、画面全体のスクリーンショットを撮ってSprite.Create()**でSpriteに変換すること自体は既にできているのですが、このやり方だと端末のアスペクト比によって画像のサイズが変わってしまいます。
そのため撮影した後Imageに貼り付けるとき,Imageと同じアスペクト比の端末で撮影したものであれば問題ないのですが,異なるアスペクト比の端末で撮影したものを貼り付けると画像が潰れてしまいます。
(例えばiPadなど正方形よりのアスペクト比の端末でスクショしたものを16:9のImageに貼り付けるとすごい潰れてしまうと思います)
最初は**Texture2D.ReadPixels()**でサイズを指定できるのだと思っていましたが、基準点が左下になっているため、うまくいきませんでした。
なので画面中央でスクリーンショットを撮影する方法があれば教えて欲しいです。よろしくお願いします;;
※画像を撮影して、その後画像をトリミングするといった方法でも行けそうなのでこっちでも大丈夫です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/12 09:01
2021/09/12 09:09
2021/09/13 05:36