| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import 'dart:math';
- import 'package:flutter/material.dart';
- import 'dart:ui' as ui;
- import 'package:logging/logging.dart';
- final Logger _log = Logger('ui_image.dart');
- class UIImage extends StatelessWidget {
- final ui.Image image;
- final Size size;
- const UIImage({super.key, required this.image, this.size = Size.infinite});
- @override
- Widget build(BuildContext context) {
- return CustomPaint(
- size: size,
- painter: _UIImagePainter(image: image),
- );
- }
- }
- class _UIImagePainter extends CustomPainter {
- final ui.Image image;
- _UIImagePainter({required this.image});
- Rect getRect(Rect content, Rect canvas) {
- double scale = min(content.width / canvas.width, content.height / canvas.height);
- Rect rect = Rect.fromLTWH(0, 0, canvas.width * scale, canvas.height * scale);
- Offset offset = content.center - rect.center;
- return rect.shift(offset);
- }
- @override
- void paint(Canvas canvas, Size size) {
- Rect content = Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble());
- Rect canvasRect = Rect.fromLTWH(0, 0, size.width, size.height);
- try {
- canvas.drawImageRect(image, getRect(content, canvasRect), canvasRect, Paint());
- } catch (e) {
- _log.warning(e);
- }
- }
- @override
- bool shouldRepaint(covariant CustomPainter oldDelegate) {
- return true;
- }
- }
|