Skip to content

Picture.toImage not working correctly. #10085

@vikk

Description

@vikk

Steps to Reproduce

If I run the following code it should draw a straight line on the screen. Instead of this it seems that canvas.drawImage put nothing on the canvas just the drawLine function is displayed.

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();
}

Logs

Launching lib\main.dart on ZTE V967S in debug mode...
Built build\app/outputs/apk/app-debug.apk (21.5MB).
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.19, dur:1012.46, max:16.37, min:13.97
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.21, dur:1012.15, max:20.67, min:9.65
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.05, dur:1014.66, max:17.36, min:13.24
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.22, dur:1011.89, max:18.00, min:12.92
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.12, dur:1013.48, max:30.47, min:2.36
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:64.99, dur:1000.19, max:34.94, min:4.09
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:61.94, dur:1017.09, max:31.41, min:9.94
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.35, dur:1010.01, max:19.08, min:11.16
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:63.58, dur:1006.61, max:28.03, min:7.28
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.29, dur:1010.86, max:16.74, min:13.57
I/SurfaceTextureClient( 9752): [STC::queueBuffer] (this:0x5d457c18) fps:65.63, dur:1005.58, max:28.71, min:2.83

Flutter Doctor

C:/Users/vikkesz/flutter/flutter/bin/flutter.bat --no-color doctor
[√] Flutter (on Microsoft Windows [Version 6.1.7601], channel alpha)
• Flutter at C:\Users\vikkesz\flutter\flutter
• Framework revision 9f1d5ba (6 days ago), 2017-05-09 17:06:52 -0700
• Engine revision cbbf956
• Tools Dart version 1.23.0-dev.11.11

[√] Android toolchain - develop for Android devices (Android SDK 25.0.3)
• Android SDK at C:\Users\vikkesz\AppData\Loca\Android\sdk
• Platform android-25, build-tools 25.0.3
• ANDROID_HOME = C:\Users\vikkesz\AppData\Loca\Android\sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version: OpenJDK Runtime Environment (build 1.8.0_112-release-b06)

[√] Android Studio (version 2.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Gradle version 3.2
• Java version: OpenJDK Runtime Environment (build 1.8.0_112-release-b06)

[√] IntelliJ IDEA Community Edition (version 2016.2)
• Dart plugin version 162.2924
• Flutter plugin version 0.1.11.1

[√] Connected devices
• ZTE V967S • 0123456789ABCDEF • android-arm • Android 4.2.1 (API 17)

Metadata

Metadata

Assignees

No one assigned

    Labels

    engineflutter/engine related. See also e: labels.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions