Flutter - искажение при сохранении изображения с помощью CustompaintAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Flutter - искажение при сохранении изображения с помощью Custompaint

Сообщение Anonymous »

Я разрабатываю функцию в приложении Flutter, где пользователи могут снимать фотографию, используя пакет камеры. После захвата изображение отображается на экране, что позволяет пользователям рисовать линии и точки на нем, используя CustomPaint. Проблема возникает при сохранении изображения с помощью чертежей: базовое изображение сохраняется правильно, но нарисованные линии и точки кажутся искаженными, особенно сокращены и сдвинуты вверх.

Код: Выделить всё

Future _saveUpdatedImage() async {
try {
/// PNG
///
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
final image = File(widget.imagePath);
final ui.Image decodedImage = await decodeImageFromFile(image);

// Draw the image first:
canvas.drawImage(decodedImage, Offset.zero, Paint());

// Then draw the painter on top:
final painter = DrawingPainter(_points, _lines);
painter.paint(canvas,
Size(decodedImage.width.toDouble(), decodedImage.height.toDouble()));

final picture = recorder.endRecording();
final ui.Image updatedImage =
await picture.toImage(decodedImage.width, decodedImage.height);
final byteData =
await updatedImage.toByteData(format: ui.ImageByteFormat.png);
final pngBytes = byteData!.buffer.asUint8List();

final file = File(widget.imagePath);
await file.writeAsBytes(pngBytes);

ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Image updated and saved!')),
);
} catch (e) {
print('Error saving image: $e');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error saving image!')),
);
}
}
Пользовательский художник

Код: Выделить всё

class DrawingPainter extends CustomPainter {
final List points;
final List lines;

DrawingPainter(this.points, this.lines);

@override
void paint(Canvas canvas, Size size) {

final pointPaint = Paint()
..color = Colors.red
..strokeWidth = 5.0;

final linePaint = Paint()
..color = Colors.blue
..strokeWidth = 3.0
..style = PaintingStyle.stroke;

for (final point in points) {
canvas.drawPoints(PointMode.points, [point], pointPaint);
}

for (final line in lines) {
if (line.isNotEmpty) {
for (int i = 0; i < line.length - 1; i++) {
canvas.drawLine(line[i], line[i + 1], linePaint);
}
}
}
}

@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
Первая строка после сохраненной, а вторая строка - это происхождение, когда пользователь рисует.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ustompaint
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»