我正在开发一个应用程序,允许用户拍照并在图像上用不同大小的笔触和颜色绘制线条。
我已使用插件image_picker
允许用户使用camera
拍照。
我目前很困惑,因为我似乎找不到能够使我实现该功能以允许用户绘制图像的解决方案。
请提出任何建议。
您可以使用Stack Widget:显示捕获的图像,并在其上方添加一个使用CustomPainter类的窗口小部件。我假设绘制完图像后,您要将所有内容保存为图像。为此,您应该看看RepaintBoundary类。
,也许这段代码可以为您提供帮助。
$private = DB::table('privacy_settings')->where("city",0)->get();
print_r($private);
$data['users'] = $users->where("city",0)->orderBy('id','DESC')->skip($offset)->take($perPage)->get()->toArray();
print_r($data['users']);
,
查看下面的代码,来自@LuckyDog的引用,但是图片被调整了大小,并且列表点在图片高度范围内。
class ImagePainter extends CustomPainter {
ImagePainter({this.image,this.pointsList});
ui.Image image;
List<DrawingPoints> pointsList;
List<Offset> offsetPoints = List();
List<Offset> points = List();
// final Paint painter = new Paint()
@override
void paint(Canvas canvas,Size size) {
// canvas.drawImage(this.image,Offset(0.0,0.0),Paint());
final imageSize = Size(image.width.toDouble(),image.height.toDouble());
final src = Offset.zero & imageSize;
final dst = Offset.zero & size;
// canvas.pic
canvas.drawImageRect(this.image,src,dst,Paint());
// for (Offset offset in points) {
// canvas.drawCircle(offset,10,painter);
// }
pointsList = pointsList.map((e) {
if (e != null) {
if (e.points.dy <= dst.height) {
return e;
}
}
return null;
}).toList();
for (int i = 0; i < pointsList.length - 1; i++) {
if (pointsList[i] != null && pointsList[i + 1] != null) {
canvas.drawLine(pointsList[i].points,pointsList[i + 1].points,pointsList[i].paint);
} else if (pointsList[i] != null && pointsList[i + 1] == null) {
offsetPoints.clear();
offsetPoints.add(pointsList[i].points);
offsetPoints.add(Offset(
pointsList[i].points.dx + 0.1,pointsList[i].points.dy + 0.1));
canvas.drawPoints(
ui.PointMode.points,offsetPoints,pointsList[i].paint);
}
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}