Каковы эквиваленты CGContext.translateBy/ScaleBy в Xamarin.iOS?

#c# #ios #swift #xamarin.ios

#c# #iOS #swift #xamarin.ios

Вопрос:

У меня есть фрагмент кода Swift, который я хотел бы преобразовать в c # в Xamarin.iOS.

 func test(source: UIImage)
{
    let context = UIGraphicsGetCurrentContext()!
    if let cgImage = source.cgImage {
            context.translateBy(x: 0, y: source.size.height)
            context.scaleBy(x: 1.0, y: -1.0)
            let rect = CGRect(x: 0.0, y: 0.0, width: source.size.width, height: source.size.height)
            context.draw(cgImage, in: rect)
        }
    ....
}
 

Вот что у меня есть прямо сейчас:

 public void Test(UIImage source)
{
    var context = UIGraphics.GetCurrentContext();
    var cgImage = source.CGImage;
    if (cgImage != null)
    {
       context.TranslateCTM(tx: 0, ty: source.Size.Height);
       context.ScaleCTM(sx: 1.0f, sy: -1.0f);
       var rect = new CGRect(x: 0.0f, y: 0.0f, width: source.Size.Width, height: source.Size.Height);
       context.DrawImage(rect, cgImage);
    }
    ....
}
 

Я понятия не имею, становится ли translateBy TranslateCTM и scaleBy становится `ScaleCTM».

Я просто могу сказать, что результата, которого я ожидаю, нет.


РЕДАКТИРОВАТЬ: это полный код, который я пытаюсь преобразовать. По сути, это позволяет мне добавлять значок уведомления к изображению.

Конечный результат, который я получаю, — это изображение только со значком уведомления, исходное изображение полностью исчезло.

Без значка:

введите описание изображения здесь

С помощью значка:

введите описание изображения здесь


РЕДАКТИРОВАТЬ 2: код корректен для второго комментария @Sweeper.

Проблема в том, что мое изображение представляет собой формат png, для применения которого требовался оттеночный цвет:

 public void Test(UIImage source, UIColor tintColor = null)
{
    var context = UIGraphics.GetCurrentContext();
    var cgImage = source.CGImage;
    if (cgImage != null)
    {
       context.TranslateCTM(tx: 0, ty: source.Size.Height);
       context.ScaleCTM(sx: 1.0f, sy: -1.0f);
       var rect = new CGRect(x: 0.0f, y: 0.0f, width: source.Size.Width, height: source.Size.Height);
       context.DrawImage(rect, cgImage);
       if ( tintColor != null)
       {
           context.SetFillColor(tintColor.CGColor);
           context.SetBlendMode(CGBlendMode.SourceAtop);
           context.FillRect(rect);
        }
    }
    ...
}
 

Комментарии:

1. Можете ли вы показать результат, который вы ожидаете, и результат, который вы получили?

2. Вызывается версия Objective-C CGContextTranslateCTM , поэтому context.TranslateCTM , вероятно, здесь правильный метод. Xamarin. Имя iOS обычно ближе к имени объекта.