-
-
Save netsmertia/9c588f23391c781fa1eb791f0dce0768 to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart'; | |
import 'dart:ui' as ui; | |
import 'package:flutter/services.dart' show rootBundle; | |
import 'dart:async'; | |
import 'dart:typed_data'; | |
void main() => runApp(new MyApp()); | |
class MyApp extends StatelessWidget { | |
// This widget is the root of your application. | |
@override | |
Widget build(BuildContext context) { | |
return new MaterialApp( | |
title: 'Flutter Demo', | |
theme: new ThemeData( | |
primarySwatch: Colors.blue, | |
), | |
home: new MyHomePage(title: 'Flutter Demo Home Page'), | |
); | |
} | |
} | |
class MyHomePage extends StatefulWidget { | |
MyHomePage({Key key, this.title}) : super(key: key); | |
final String title; | |
@override | |
_MyHomePageState createState() => new _MyHomePageState(); | |
} | |
class _MyHomePageState extends State<MyHomePage> { | |
ui.Image image; | |
bool isImageloaded = false; | |
void initState() { | |
super.initState(); | |
init(); | |
} | |
Future <Null> init() async { | |
final ByteData data = await rootBundle.load('images/lake.jpg'); | |
image = await loadImage(new Uint8List.view(data.buffer)); | |
} | |
Future<ui.Image> loadImage(List<int> img) async { | |
final Completer<ui.Image> completer = new Completer(); | |
ui.decodeImageFromList(img, (ui.Image img) { | |
setState(() { | |
isImageloaded = true; | |
}); | |
return completer.complete(img); | |
}); | |
return completer.future; | |
} | |
Widget _buildImage() { | |
if (this.isImageloaded) { | |
return new CustomPaint( | |
painter: new ImageEditor(image: image), | |
); | |
} else { | |
return new Center(child: new Text('loading')); | |
} | |
} | |
@override | |
Widget build(BuildContext context) { | |
return new Scaffold( | |
appBar: new AppBar( | |
title: new Text(widget.title), | |
), | |
body: new Container( | |
child: _buildImage(), | |
) | |
); | |
} | |
} | |
class ImageEditor extends CustomPainter { | |
ImageEditor({ | |
this.image, | |
}); | |
ui.Image image; | |
@override | |
void paint(Canvas canvas, Size size) { | |
ByteData data = image.toByteData(); | |
canvas.drawImage(image, new Offset(0.0, 0.0), new Paint()); | |
} | |
@override | |
bool shouldRepaint(CustomPainter oldDelegate) { | |
return false; | |
} | |
} |
wow great thx~!
thx.
hey @netsmertia how to rotate that image we are using for canvas.drawImage.
I use my custom image but now I want to rotate that but when I use canvas.rotate then black output is occurring
https://pub.dev/packages/flutter_image_compress#rotate
FlutterImageCompress.compressAndGetFile(filePath, rotatePath, minHeight: 480, minWidth: 400, rotate: -90);
love you 3000 times!
thx
Where do you put FlutterImageCompress.compressAndGetFile(filePath, rotatePath, minHeight: 480, minWidth: 400, rotate: -90); in which line? what do you mean with target path
thank you very much =)
thank you!!
How to load & draw image independently just on custom painter?
love you
If the image is not an asset image, but a file stored on the device, and its path is known, you can do like this:
Future<ui.Image> loadImage(Uint8List bytes) async {
final Completer<ui.Image> completer = Completer();
ui.decodeImageFromList(bytes, (ui.Image img) {
return completer.complete(img);
});
return completer.future;
}
File file = File(thePath);
Uint8List bytes = await file.readAsBytes();
ui.Image backgroundImage = await loadImage(bytes);
and in the Custom Painter:
canvas.drawImage(backgroundImage, Offset(0.0, 0.0), Paint());
Works with both .png and .jpg files.
how could I change the size of the image?
If the image is not an asset image, but a file stored on the device, and its path is known, you can do like this:
Future<ui.Image> loadImage(Uint8List bytes) async { final Completer<ui.Image> completer = Completer(); ui.decodeImageFromList(bytes, (ui.Image img) { return completer.complete(img); }); return completer.future; } File file = File(thePath); Uint8List bytes = await file.readAsBytes(); ui.Image backgroundImage = await loadImage(bytes);
and in the Custom Painter:
canvas.drawImage(backgroundImage, Offset(0.0, 0.0), Paint());
Works with both .png and .jpg files.
Thanks a lot!!
hello
after testing your code it seems that something has changed the image loading does not work anymore
these normal?
cdl remy
How can I add the eraser mode on canvas but the eraser should not erase the picture?
love you (3)