首页 > 解决方案 > 绘制前 Skiasharp 比例位图

问题描述

我有个问题。我正在使用 TextToBitmap 函数,所以我可以修改位图。但是当我将其缩放到更大的位图时,文本的分辨率会变差。为了解决这个问题,我将 TextSize 设置为 400,因此文本以高分辨率绘制得非常大,这给了我一个高分辨率位图。问题是当绘制位图时,它仍然很大,所以我想将位图缩放到特定的高度。

现在我知道我该怎么做,我需要这样做:

bitmapCollection.Add(bitmapCollection.Count, new TouchManipulationBitmap(TextBitmap)
{
    Matrix = SKMatrix.MakeTranslation(position.X, position.Y),
    Matrix = SKMatrix.MakeScale((float)0.3, (float)0.3),
});

但我不能使用 Matrix 2 次。翻译和比例是必要的,那么我该如何修改呢?

编辑:

我尝试使用这个:

SKMatrix matrix;
bitmapCollection.Add(bitmapCollection.Count, new TouchManipulationBitmap(TextBitmap)
{
    Matrix = SKMatrix.Concat(matrix, SKMatrix.MakeTranslation(position.X, position.Y),
                        SKMatrix.MakeScale((float)0.3, (float)0.3))
});

但这给了我以下错误:

参数 1 必须使用 'ref' 关键字传递 使用未分配的局部变量 'matrix'

我究竟做错了什么?

标签: c#xamarinxamarin.formsxamarin.androidxamarin.ios

解决方案


使用Concat组合两个矩阵

public static void Concat (ref SkiaSharp.SKMatrix target, ref SkiaSharp.SKMatrix first, ref SkiaSharp.SKMatrix second);

文档中有关于这个主题的冗长讨论。

在您的具体情况下

SKMatrix matrix = new SKMatrix();

// matrix will contain the combined value
SKMatrix.Concat(ref matrix, 
  SKMatrix.MakeTranslation(position.X, position.Y),
  SKMatrix.MakeScale((float)0.3, (float)0.3))

推荐阅读