0
こんにちは、私はダーツにはかなり新しいです。私が達成したいのは、以前のものを定期的に残してキャンバスに描画することです。ダーツで定期的にキャンバスに描く
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();
}
問題は、以前のイメージ、描画drawImageによる描画がキャンバスに表示されなかったことです。 事前にお手数をおかけしていただきありがとうございます。