Я пытаюсь нарисовать на растровом изображении и поместить его растровым изображением в SKRect, так как тогда размер изображения больше, чем на экране устройства.Все отлично работает и я умею рисовать даже.Но соприкасающиеся координаты не совпадают с нарисованным путем на растровом изображении.(т.е. я касаюсь одной стороны холста, и он рисует в некоторых других точках).Я не понимаю, в чем проблема, это происходит только тогда, когда я помещаю битма в SKRect.
Я перешел по этой ссылке, но не нашел ответа.Я даже следовал Xamarin Microsoft Documents, и я делаю то же самое, но безрезультатно.Я просто пытаюсь рисовать пальцем на растровом изображении.
рисование на растровом изображении с использованием skiasharp в xamarin
Вот мой код.
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
{
SKImageInfo info = args.Info;
SKSurface surface = args.Surface;
SKCanvas canvas = surface.Canvas;
float scale = Math.Min((float)info.Width / bitmap.Width,
(float)info.Height / bitmap.Height);
float x = (info.Width - scale * bitmap.Width) / 2;
float y = (info.Height - scale * bitmap.Height) / 2;
SKRect destRect = new SKRect(x, y, x + scale * bitmap.Width,
y + scale * bitmap.Height);
canvas.DrawBitmap(bitmap, destRect);
foreach (SKPath path in completedPaths)
{
canvas.DrawPath(path, paint);
}
foreach (SKPath path in inProgressPaths.Values)
{
canvas.DrawPath(path, paint);
}
}
void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{
switch (args.Type)
{
case TouchActionType.Pressed:
if (!inProgressPaths.ContainsKey(args.Id))
{
SKPath path = new SKPath();
path.MoveTo((args.Location));
inProgressPaths.Add(args.Id, path);
canvasView.InvalidateSurface();
}
break;
case TouchActionType.Moved:
if (inProgressPaths.ContainsKey(args.Id))
{
SKPath path = inProgressPaths[args.Id];
path.LineTo((args.Location));
canvasView.InvalidateSurface();
}
break;
case TouchActionType.Released:
if (inProgressPaths.ContainsKey(args.Id))
{
completedPaths.Add(inProgressPaths[args.Id]);
inProgressPaths.Remove(args.Id);
canvasView.InvalidateSurface();
}
break;
case TouchActionType.Cancelled:
if (inProgressPaths.ContainsKey(args.Id))
{
inProgressPaths.Remove(args.Id);
canvasView.InvalidateSurface();
}
break;
}
}
Я не просто выкидываю код, я пытался и могу рисовать, он просто не принимает координаты SKRect.
Пожалуйста, пожалуйста, любая помощь будет очень полезна.Спасибо