繁体   English   中英

SkiaSharp镜像位图

[英]SkiaSharp Mirror Bitmap

我希望镜像位图,以便可以使图像及其镜像彼此相邻。 我正在使用SkiaSharp,我的位图是SKBitmap,并且正在画布上绘制它们。

canvas.Translate( -imageWidth/ 2.0f, -imageHeight/ 2.0f );
canvas.Scale( -1, 1,0,0 );
canvas.DrawBitmap( bitmap, new SKPoint( 0.0f, 0.0f ) );
canvas.Scale( -1, 1, 0, 0 );
canvas.Translate( imageWidth/ 2.0f, imageHeight / 2.0f );

我将图像围绕原点居中,围绕Y轴镜像,在画布上绘制位图,然后撤消变换以获取结果。

我的问题似乎是当我开始使用scale方法时,位图就消失了。 如果我画圆之类的东西,则不会发生这种情况。

这是因为您实际上想做相反的事情。 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 and Restore方法):

using(new SKAutoCanvasRestore(canvas, true))
{
   // transform and draw . . .
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM