forked from firka/flutter
Add test for image readback (flutter/engine#37401)
This commit is contained in:
@@ -635,6 +635,51 @@ void _testForImageCodecs({required bool useBrowserImageDecoder}) {
|
||||
codec.dispose();
|
||||
});
|
||||
|
||||
test('decoded image can be read back from picture', () async {
|
||||
final DomResponse imageResponse = await httpFetch('/test_images/mandrill_128.png');
|
||||
final Uint8List imageData = (await imageResponse.arrayBuffer() as ByteBuffer).asUint8List();
|
||||
final ui.Codec codec = await skiaInstantiateImageCodec(imageData);
|
||||
final ui.FrameInfo frame = await codec.getNextFrame();
|
||||
final CkImage image = frame.image as CkImage;
|
||||
|
||||
final CkImage snapshot;
|
||||
{
|
||||
final LayerSceneBuilder sb = LayerSceneBuilder();
|
||||
sb.pushOffset(10, 10);
|
||||
final CkPictureRecorder recorder = CkPictureRecorder();
|
||||
final CkCanvas canvas = recorder.beginRecording(ui.Rect.largest);
|
||||
canvas.drawRect(
|
||||
const ui.Rect.fromLTRB(5, 5, 20, 20),
|
||||
CkPaint(),
|
||||
);
|
||||
canvas.drawImage(image, ui.Offset.zero, CkPaint());
|
||||
canvas.drawRect(
|
||||
const ui.Rect.fromLTRB(90, 90, 105, 105),
|
||||
CkPaint(),
|
||||
);
|
||||
sb.addPicture(ui.Offset.zero, recorder.endRecording());
|
||||
sb.pop();
|
||||
snapshot = await sb.build().toImage(150, 150) as CkImage;
|
||||
}
|
||||
|
||||
{
|
||||
final LayerSceneBuilder sb = LayerSceneBuilder();
|
||||
final CkPictureRecorder recorder = CkPictureRecorder();
|
||||
final CkCanvas canvas = recorder.beginRecording(ui.Rect.largest);
|
||||
canvas.drawImage(snapshot, ui.Offset.zero, CkPaint());
|
||||
sb.addPicture(ui.Offset.zero, recorder.endRecording());
|
||||
|
||||
CanvasKitRenderer.instance.rasterizer.draw(sb.build().layerTree);
|
||||
await matchGoldenFile(
|
||||
'canvaskit_read_back_decoded_image_$mode.png',
|
||||
region: const ui.Rect.fromLTRB(0, 0, 150, 150),
|
||||
);
|
||||
}
|
||||
|
||||
image.dispose();
|
||||
codec.dispose();
|
||||
});
|
||||
|
||||
test('can detect JPEG from just magic number', () async {
|
||||
expect(
|
||||
detectContentType(
|
||||
|
||||
Reference in New Issue
Block a user