2016-08-04 5 views
0

검정색 이미지를 전달하는 public static 메서드가 있습니다 (검정색 이미지를 전달하고 검정색 대신 빨강 색 또는 같은 색을 반환 함). 나는 동료와 이야기하고 우리가 이미지 (색상과 색상이 아닌)에 저장하는 것이 더 될 줄 알았는데, 색상이미지와 색상에 public static fields를 사용해야합니까?

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; 

을 또는 그 라인을 따라 뭔가 : 나는이 색상이나 이미지 중 하나를 사용하는 데 필요한 경우 그 방법, 난 그냥 호출 할 수 있습니다. 이것은 Xamarin을 사용하는 iOS 앱용입니다. 이 방법으로 문제가 있습니까? 이미지를 잡고 반복적으로 색상을 처리하지 않기 때문에 목록 뷰를로드하는 속도가 빨라질 수도 있습니다.

답변

0

불필요한 데이터를 메모리에로드하는 것은 의미가 없다고 생각합니다. 당신이하고자하는 것은 생각할 수있는 각 색상의 이미지를 만드는 것이며, 사용자가 특정 색상을 선택하면 사용할 준비가됩니다.

서버 모듈을 만드는 경우 조금 다른 관점이지만 한 사용자가 색상을 선택하는 한 그림 만 그릴 수 있습니다. 이미지가있는 배열을 초기화 할 시점은 무엇입니까? 그냥 사용자가이 색상을 선택 할 수있는 기회를 당신의 기억을 폭발합니다

.. 더 나은 방법 일 것입니다 무슨

대신 정적에 같이 한 번에 모든 것을로드의
+0

이미지는 심지어 같은 화면에 같은 이미지를 여러 번 같이 응용 프로그램을 통해 모든 사용된다. 지금은리스트 뷰의 경우 이미지를 계속해서 색칠합니다. 나는 ios가 동일한 이미지를 사용하여이를 최적화하는지 또는 디스크에서 매번 이미지를 가져 오는 지 여부를 알지 못합니다 ... 성능 향상을 위해 이미지의 메모리를 약간 희생 시키십시오. – aufty

+1

경우, 내 의견에 더 나은 접근 방식은 다음과 같습니다 : 싱글 톤을 만들 때마다 이미지 처리가 가능할 때마다 한 번 이미지가 사전에 보관됩니다. , 다음 번에 싱글 톤이 해고됩니다. 그 이미지가있을 경우 그 이미지를, 그렇지 않으면 새로운 것을 생성합니다. 그런 식으로 룰렛과 같이 다양한 이미지를 만드는 것이 아니라 "주문형"데이터를 항상 사용할 수 있습니다. – Tomerz

1

는 캐싱을 사용하는 것입니다. 한 번로드 된 이미지는 메모리에 저장되며 다음에 요청할 때 생성되지 않습니다. 그러나 아직 묻지 않은 이미지는 어떤 기억도 차지하지 않습니다.

일반 속성이나 정적 속성을 사용할 수 있습니다.

또는 색상 이름 및 키와 값으로 이미지를 개인 읽기 전용 사전을 만듭니다. 요청시 키를 사용할 수 있으면 반환하고 그렇지 않으면 사전을 만들고 추가하여 이미지를 반환합니다.

일부 샘플 코드 :

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; 
    } 
}