0
Hallo, ich bin ziemlich neu in Dart. Was ich gerne erreichen würde, ist, dass ich regelmäßig auf Leinwand zeichne und das vorherige Material dort belasse.Draw zu Canvas regelmäßig in Dart
import 'dart:developer';
import 'dart:typed_data';
import 'dart:ui' as ui;
Duration timeBase;
double x = 0.0;
double y = 0.0;
int i = 0;
ui.Image image;
void beginFrame(Duration timeStamp){
Timeline.timeSync('beginFrame',(){
if(timeBase == null)timeBase = timeStamp;
final double devicePixelRatio = ui.window.devicePixelRatio;
// paint
ui.Rect paintBounds = ui.Offset.zero & ui.window.physicalSize;
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder,paintBounds);
if(image != null){
canvas.drawImage(image,ui.Offset.zero,new ui.Paint());
}
var paint = new ui.Paint();
paint.color = const ui.Color.fromARGB(255,0,255,0);
paint.strokeCap = ui.StrokeCap.round;
paint.strokeWidth = 17.0;
canvas.drawLine(new ui.Offset(x,y),new ui.Offset(x + 25,y + 25),paint);
x = x + 1;
if(x > ui.window.physicalSize.width/devicePixelRatio){
x = x - ui.window.physicalSize.width/devicePixelRatio;
}
y = y + 1;
if(y > ui.window.physicalSize.height/devicePixelRatio){
y = y - ui.window.physicalSize.height/devicePixelRatio;
}
ui.Picture picture = recorder.endRecording();
image = picture.toImage(ui.window.physicalSize.width.toInt(),ui.window.physicalSize.height.toInt());
// composite
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder()
..pushTransform(deviceTransform)
..addPicture(ui.Offset.zero,picture)
..pop();
ui.window.render(sceneBuilder.build());
});
ui.window.scheduleFrame();
}
void main() {
ui.window.onBeginFrame = beginFrame;
ui.window.scheduleFrame();
}
Das Problem ist, dass das vorherige Bild, zeichnen mit der Methode DrawImage nicht auf der Leinwand angezeigt wurde. Vielen Dank für Ihre Hilfe im Voraus.