#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 обычно ближе к имени объекта.