Добавление одного изображения к фону CGContext делает представление плитки на выходе - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я разрабатываю проект с использованием CGContext для рисования изображения по определенному пути.

В моем примере я использовал файл класса, который унаследован от UIView,

ВнутриМетод переопределения рисования, я получаю UIGraphics.GetCurrentContext (), с помощью этого я нарисовал дугу от 0 до 360 градусов,

CGContext setFillColor должен быть заполнен изображением, поэтому я использовалниже приведенного кода.

var image = UIColor.FromPatternImage(imageView);

context.SetFillColor(image.CGColor);

imageView содержит одно изображение, но на экране вывода изображение повторяется много раз.

Пример для репликации этой проблемы был обновлен в этом запросе.

Пожалуйста, скачайте образец по этой ссылке

Примечание: этот вопрос был поднят на GitHub

Они сказали, чтоэто поведение.При добавлении изображения на фоне CGContext мы получим плитки изображения на экране.

Может ли кто-нибудь помочь мне разобраться с этой проблемой?

Спасибо и С уважением,

Сельва Кумар В.

1 Ответ

0 голосов
/ 20 сентября 2018

Как сказано в ссылке ( Apple Document ).Во время рисования изображение в цвете рисунка выкладывается мозаикой по мере необходимости, чтобы покрыть данную область, если вы вызываете метод UIColor.FromPatternImage. Поэтому вы можете масштабировать размер изображения перед вызовом метода. Обратитесь к следующему коду.

public UIImage ScalingImageToSize(UIImage sourceImage,CGSize newSize)
  {

  if(UIScreen.MainScreen.Scale==2.0) //@2x iPhone 6 7 8 
    {

     UIGraphics.BeginImageContextWithOptions(newSize, false, 2.0f);
    }

   else if(UIScreen.MainScreen.Scale == 3.0) //@3x iPhone 6p 7p 8p...
    {
     UIGraphics.BeginImageContextWithOptions(newSize, false, 3.0f);
    }

   else
    {
     UIGraphics.BeginImageContext(newSize);
    }

   sourceImage.Draw(new CGRect(0, 0, newSize.Width, newSize.Height));

   UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();

   UIGraphics.EndImageContext();

   eturn newImage;

  } 



   //. . .
    UIImage imageView = new UIImage("a0.png");
    UIImage newImage = ScalingImageToSize(imageView, new CGSize(200, 400)(the size you want));
    var image = UIColor.FromPatternImage(newImage); 
   //. . .
...