2016-08-04 6 views
0

私は、色の置き換えられたイメージを返すパブリックな静的メソッドを持っています(黒いイメージを渡し、同じイメージを黒の代わりに赤で返します)。イメージとカラーにpublic staticフィールドを使用する必要がありますか?

それは次のようになります。

public class ColorImage 
{ 
    public static UIImage GetColoredImage(UIImage image, UIColor color) 
    { 
     UIImage coloredImage = null; 
     if (color == null) 
     { 
      color = UIColor.FromRGB(44, 132, 248); 
     } 

     UIGraphics.BeginImageContextWithOptions(image.Size, false, UIScreen.MainScreen.Scale); 
     using (CGContext context = UIGraphics.GetCurrentContext()) 
     { 
      context.TranslateCTM(0, image.Size.Height); 
      context.ScaleCTM(1.0f, -1.0f); 

      var rect = new RectangleF(0, 0, (float)image.Size.Width, (float)image.Size.Height); 

      context.ClipToMask(rect, image.CGImage); 
      context.SetFillColor(color.CGColor); 
      context.FillRect(rect); 

      coloredImage = UIGraphics.GetImageFromCurrentImageContext(); 
      UIGraphics.EndImageContext(); 
     } 
     return coloredImage; 
    } 
} 

私は同僚と話していたし、我々はイメージ(色と色ではなく)を格納するために、より良いかもしれないと思った、と私たちは公共の場で私たちのアプリケーション全体で使用する予定の色静的フィールド。

Textfield.BackgroundColor = ColorCache.MainColor; 
Textfield.Image = ImageCache.UserImage; 

をまたはそれらの線に沿って何か:私はこれらの色やイメージの1つを使用するために必要であればそのように、私はちょうど呼び出すことができます。これは、Xamarinを使用しているiOSアプリ向けです。このようにすることに問題はありますか?画像をつかんで色を何度も何度も処理していないので、リストビューの読み込み速度が速くなることも考えられます。

答えて

0

不要なデータをメモリに読み込むのは意味がないと思います。 あなたがしようとしているのは、考えている色ごとに画像を作成することです。ユーザーがその特定の色を選択すると、すぐに使用できます。

サーバーモジュールを構築していたのでは、少し違った見方だったのですが、一人のユーザーが色を選択している限り、それをペイントするしかありませんでした。画像で配列を初期化するのは何ですか?それだけで、ユーザーがこの色を選択するかもしれないという可能性のためのあなたの記憶を爆破します

..より良いアプローチがどうなるか

代わりに静的に似一度にすべてをロードする
+0

public static class ColorImage { private static readonly Dictionary<UIColor, UIImage> _colorDictionary = new Dictionary<UIColor, UIImage>(); public static UIImage GetColoredImage(UIImage image, UIColor color) { if(_colorDictionary.ContainsKey(color)) { _colorDictionary.TryGetValue(color, out image); } else { //create the image _colorDictionary.Add(color, image); } return image; } } 
画像があっても同じ画面上に、同じ画像を複数回のように、すべてのアプリケーションにわたって使用されています。今は、リストビューの場合、イメージを何度も色づけしています。私は、iosが同じイメージを使ってこれを最適化するかどうか、ディスクから毎回イメージを取得するのかどうかはわかりません...もし性能向上のためにイメージのメモリ量を少し犠牲にしたいのなら、 – aufty

+1

場合は、私の意見では、より良いアプローチは: シングルトンを作成するたびに1つの画像処理が利用可能になる、一度画像は、辞書<色、UIImage>、それを維持する準備ができて、それが存在すればそのイメージを探し、そうでなければ新しいイメージを生成します。 そのようにすれば、ルーレットのような様々な画像を作成するだけでなく、いつでも「オンデマンド」で使用するデータだけが得られます。 – Tomerz

1

は、キャッシュを使用することです。そのため、一度読み込まれた画像はメモリに保存され、次に尋ねられたときに作成されることはありません。しかし、まだ尋ねられていない画像は記憶を占有しません。

通常のプロパティまたは静的プロパティを使用できます。

または、カラー名とイメージをキーと値として持つ専用の読み取り専用辞書を作成します。要求されたときにキーが使用可能な場合は、それを戻します。作成して辞書に追加し、イメージを戻します。

いくつかのサンプルコード:

関連する問題