Flutter - 如何使用 Canvas 围绕中心旋转图像?

Flutter - How to rotate an image around the center with Canvas?

我正在尝试从中心旋转 ui.Image。我可以旋转图像,但图像没有旋转到准确的角度。我添加了下面的图片...

当我通过 0 作为工作线的角度时。

现在当我超过 90 度时你就可以解决问题了。小车转了90多

现在当我通过 180 度作为角度时,您就可以解决问题了。车转了180多

这是我的代码:

  Future<ui.Image> getUiImage(String assetImageName, double angle) async {
final ByteData assetImageByteData = await rootBundle.load(imageAssetPath);
image.Image baseSizeImage =
    image.decodeImage(assetImageByteData.buffer.asUint8List());
ui.Codec codec =
    await ui.instantiateImageCodec(image.encodePng(baseSizeImage));
ui.FrameInfo frameInfo = await codec.getNextFrame();
var pictureRecorder = ui.PictureRecorder();
Canvas canvas = Canvas(pictureRecorder);

final double r = sqrt(frameInfo.image.width * frameInfo.image.width +
        frameInfo.image.height * frameInfo.image.height) /
    2;
final alpha = atan(frameInfo.image.height / frameInfo.image.width);
final beta = alpha + angle;
final shiftY = r * sin(beta);
final shiftX = r * cos(beta);
final translateX = frameInfo.image.width / 2 - shiftX;
final translateY = frameInfo.image.height / 2 - shiftY;
canvas.translate(translateX, translateY);
canvas.rotate(angle);
canvas.drawImage(frameInfo.image, Offset.zero, Paint());
return pictureRecorder
    .endRecording()
    .toImage(frameInfo.image.width, frameInfo.image.height);}

请帮我解决这个问题。

这可能是因为您使用的是度数,而旋转函数需要的是弧度。当你插入 90 弧度时,它变成相当于 5156.62 度(最终效果是将对象旋转 116.62 度 - 略大于 90 度)

要将 angle 转换为弧度,请将该值乘以 pi/180

double radians = angle * pi / 180;