Это потому, что вы действительно хотите сделать наоборот. Рисование в SkiaSharp происходит путем преобразования матрицы, а затем рисования с использованием этого.
Ваш код фактически запрашивает это:
- переместить источник за пределы экрана (влево и вверх) на половину ширины и высоты растрового изображения
- перевернуть начало координат по оси Y (это заставит правую сторону изображения перевернуть в крайнее левое положение)
- нарисуйте изображение с верхним левым краем в начале координат (прямо сейчас в крайнем левом углу экрана)
То, что вы хотите сделать, это наоборот, но есть и быстрый способ перевернуть матрицу в центре:
canvas.Scale(-1, 1, imageWidth / 2.0f, 0);
canvas.DrawBitmap(bitmap, 0, 0);
Чтобы сделать это в отдельных операциях, вам просто нужно перевести все изображение вправо, а затем перевернуть:
canvas.Translate(imageWidth , 0);
canvas.Scale(-1, 1, 0, 0);
Кроме того, чтобы избежать смешанных преобразований и необходимости отмены всего, просто оберните их в SKAutoCanvasRestore
(или просто используйте методы Save
и Restore
):
using(new SKAutoCanvasRestore(canvas, true))
{
// transform and draw . . .
}