前提
Xamarin環境下でC#を利用し、iOSアプリケーションを作成しております。
今回、透過状態のUIImage上に、文字列を合成して表示する必要が出てきました。
そこで以下のコードを組んで動作を確認したのですが、何も描画されず、白い板が表示されています。
該当のソースコード
C#
1 // 文字列生成 2 UIImage image = null; 3 4 CGSize windowSize = new CGSize(TEXT_WINDOW_X, TEXT_WINDOW_Y); 5 UIGraphics.BeginImageContextWithOptions(windowSize, false, 0); 6 7 CGContext context = UIGraphics.GetCurrentContext(); 8 9 nfloat fontSize = 64.0f; 10 NSString text = new NSString(name); 11 UIFont font = UIFont.FromName("Hiragino Kaku Gothic ProN W3", fontSize); 12 RectangleF rectF = new RectangleF(0, 0, TEXT_WINDOW_X, TEXT_WINDOW_Y); 13 14 context.SetFillColor(UIColor.Black.CGColor); 15 text.DrawString(rectF, font, UILineBreakMode.WordWrap, UITextAlignment.Left); 16 17 image = UIGraphics.GetImageFromCurrentImageContext(); 18 UIGraphics.EndImageContext();
試したこと
BeginImageContextWithOptionメソッドの第2パラメータをtrueとし、contextにFillRectを行いましたが
指定した色が表示されず、白い板のままです。
また、文字列に指定している色の値や、文字サイズなどはいくつか変更してみましたが、変化がありません。
補足情報
表示されている白い板は、指定サイズであることが確認されております。
NSStringで指定されている"name"が、表示したい任意の文字列です。
また、フォントの指定についても正しい指定がなされていることが確認できています。
実現したいこと
最終的には、文字列のみが表示されている背景透過のUIImage画像が必要となります。
何か不足な部分などあるようでしたら、どうぞご教授願います。
追記・テクスチャ登録処理
以下にテクスチャ登録処理を追記します。
C#
1 //--------------------------------------------------- 2 // ゲーム用テクスチャの生成 3 // ※イメージデータ指定版 4 //--------------------------------------------------- 5 public void InitTexture(UIImage[] image, int start, int end) 6 { 7 int i; 8 int len = image.Length; 9 10 // 配列の初期化 11 mTextureID = new int[len]; // バインド用テクスチャID配列 12 mTextureBitmap = new NSData[len]; // 画像保存用配列 13 mTextureSize = new int[len, (int)Def.XYWH]; // テクスチャサイズ保存用配列 14 15 // テクスチャのワークを生成 16 GL.GenTextures(len, mTextureID); 17 18 // ゲーム用テクスチャイメージを取得 19 for (i = start; i < end; i++) 20 { 21 if (i >= len) continue; 22 23 // ビットマップイメージを生成 24 CGDataProvider dp = image[i].CGImage.DataProvider; 25 NSData data = dp.CopyData(); 26 mTextureBitmap[i] = data; 27 28 // テクスチャサイズの取得 29 mTextureSize[i, (int)Def.X] = 0; 30 mTextureSize[i, (int)Def.Y] = (int)image[i].CGImage.Height; 31 mTextureSize[i, (int)Def.W] = (int)image[i].CGImage.Width; 32 mTextureSize[i, (int)Def.H] = (int)-image[i].CGImage.Height; 33 34 // テクスチャの登録 35 GL.BindTexture(All.Texture2D, mTextureID[i]); 36 GL.TexParameter(All.Texture2D, All.TextureMinFilter, (int)All.Nearest); 37 GL.TexParameter(All.Texture2D, All.TextureMagFilter, (int)All.Nearest); 38 GL.TexImage2D(All.Texture2D, 0, (int)All.Rgba, mTextureSize[i, (int)Def.W], -mTextureSize[i, (int)Def.H], 0, 39 (All)OpenTK.Graphics.ES11.PixelFormat.Rgba, All.UnsignedByte, data.Bytes); 40 } 41 }
ここで引数として使用している"UIImage[] image"に生成されたUIImageが格納されます。
この処理で登録したテクスチャを"GL.Oes.DrawTex"で描画する形です。
通常のpngイメージから生成されたUIImageは正常に描画されております。
何か情報に不足がありましたら、ご連絡ください。
以上、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー