首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SkiaSharp镜像位图

SkiaSharp镜像位图
EN

Stack Overflow用户
提问于 2018-08-28 12:47:48
回答 1查看 1.6K关注 0票数 1

我想镜像一个位图,这样我就可以有一个图像和它的镜子相邻。我正在使用SkiaSharp,我的位图是SKBitmap,我在画布上画它们。

代码语言:javascript
复制
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轴上进行镜像,在画布上绘制位图,然后取消转换以获得结果。

我的问题似乎是,当我开始玩比例尺方法时,位图就会消失。如果我画一个圆圈就不会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 17:10:06

这是因为你实际上想做相反的事情。SkiaSharp绘图是通过对矩阵进行转换,然后使用该矩阵进行绘图。

实际上,您的代码要求这样做:-将原图从屏幕(左和上)移出位图宽度和高度的一半--在y轴上翻转原点(这会使图像的右侧翻转到最左边)--在原图的左上角(现在就在屏幕的最左边)绘制图像。

你想要做的正好相反,但也有一种快捷的方法可以在中间翻转矩阵:

代码语言:javascript
复制
canvas.Scale(-1, 1, imageWidth / 2.0f, 0);
canvas.DrawBitmap(bitmap, 0, 0);

要在单独的操作中完成此操作,只需将整个图像转换到右侧,然后翻转:

代码语言:javascript
复制
canvas.Translate(imageWidth , 0);
canvas.Scale(-1, 1, 0, 0);

另外,为了避免混合转换和撤销所有操作,只需将它们包装在一个SKAutoCanvasRestore中(或者只使用SaveRestore方法):

代码语言:javascript
复制
using(new SKAutoCanvasRestore(canvas, true))
{
   // transform and draw . . .
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52058337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档