質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2338閲覧

Unity)開いた画像にテキストを入力して保存したい

navesanta

総合スコア198

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/25 06:02

Unityでアプリを作っています。

指定した画像を開いてその画像にテキスト文字を入力(input)して
保存する仕組みを作りたいのですがやり方が分かりません。

画像に手書きで文字を入力する方法は
Assetsの「Simple drawing canvas」などで設置すれば可能なのですが
テキストを画像に入力する方法が見つかりません。

コードもしくはAssetsで可能な方法を知っていられる方お教えください。

下記コードはpngファイルを開いてTexture2Dに変換したところまでです。
ここからどうやればできるかヒントで結構ですのでお教えください。

環境)
PC: mac
Unity2019.4.0f1
言語:C#

public class GetPngSctipt : MonoBehaviour { #pragma warning disable 649 [SerializeField]GameObject drawObject; Sprite pngToSprite; string fileName = "001"; string dataPath; Texture2D editTexture; // Start is called before the first frame update void Start() { //pngを取得する dataPath = Application.dataPath + "/../a" + fileName + ".png"; ScreenCapture.CaptureScreenshot(dataPath); pngToSprite = LoadSprite(dataPath); drawObject.GetComponent<SpriteRenderer>().sprite = pngToSprite; //SpriteをTexture2Dに変換する editTexture = new Texture2D((int)pngToSprite.rect.width,(int)pngToSprite.rect.height); var pixels = pngToSprite.texture.GetPixels( (int)pngToSprite.textureRect.x, (int)pngToSprite.textureRect.y, (int)pngToSprite.textureRect.width, (int)pngToSprite.textureRect.height); editTexture.SetPixels(pixels); editTexture.Apply(); // rawImage.texture = editTexture; } // Update is called once per frame void Update() { } Sprite LoadSprite(string path) { if(string.IsNullOrEmpty(dataPath))return null; if(File.Exists(dataPath)) { byte[] bytes = File.ReadAllBytes(dataPath); Texture2D texture2D = new Texture2D(1, 1); texture2D.LoadImage(bytes); Sprite sprite = Sprite.Create(texture2D, new Rect(0,0, texture2D.width, texture2D.height), new Vector2(0.5f,0.5f)); return sprite; } return null; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MMashiro

2020/07/25 06:11

いまいちやりたいことがピンとこないのですが、ペイントツールのように画像に文字を入れたいという事でしょうか?
navesanta

2020/07/25 06:38

そうです。よろしくお願いします。
guest

回答2

0

これは難しいですね。ゲームエンジンですからその辺の機能は充実していません。

まず、画像を表示できないといけません。
その次に、クリックしたところに InputField か何かを出現させて、そこに文字を入力させたりします。
色とかフォント、フォントサイズを変えたければそういう機能は自分で実装しなければなりません。
最後に、画面を画像として保存する方法ですが、その画面を別の Camera で撮影し、その撮影したものを RenderTexture に書き込みます。そしてその RenderTexture をファイルに保存すればよいでしょう。

また、overlay の UI はカメラに映らないので、UI を overlay ではなく World Space に表示する必要もあります。

参考

投稿2020/07/25 07:00

bboydaisuke

総合スコア5277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

色々方法はあると思いますが、思いついた方法を挙げます

Cameraの映像をRenderTextureに取り込んでその内容をファイルに保存する

  1. ファイルに出力したい映像を映したカメラを用意する(Target TextureにRenderTextureを指定する)
  2. そのRenderTextureの内容をTexture2Dに変換するスクリプトを用意する
  3. Texture2Dに変換したスクリプトをEncodeToPNGなどを使用してbyte配列に変換
  4. 上記配列をファイルに保存

上記カメラには読み込んだ画像と書き込みたいText(uGUI)が表示されるようにしてください

あと全然質問には関係ないですが、 #pragma warning disable 649 で警告を無理やり消すより
[SerializeField]GameObject drawObject = null;
[SerializeField]GameObject drawObject = default;
の方が警告も出ず、#pragma使わなくでいいのでお勧めです

投稿2020/07/25 07:07

MMashiro

総合スコア2378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

navesanta

2020/07/25 07:23

回答ありがとうございます。 早速試してみます。とりあえずうまくいくか確認します。 また#pragma warning disable 649のご指摘ありがとうございました。 今までずっと使っていましたがご指摘の方法の方がよさそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問