diff --git a/garnet/packages/tests/BUILD.gn b/garnet/packages/tests/BUILD.gn
index f9331fb2e6cd2031f64310d04acb9bda7d9fed1b..c2d34d506cc65702fc5adc5748cde801f4e77fbe 100644
--- a/garnet/packages/tests/BUILD.gn
+++ b/garnet/packages/tests/BUILD.gn
@@ -413,6 +413,7 @@ group("all") {
     "//garnet/packages/tests:scpi",
     "//garnet/packages/tests:setui_client",
     "//garnet/packages/tests:setui_service",
+    "//garnet/packages/tests:sl4f",
     "//garnet/packages/tests:sse",
     "//garnet/packages/tests:stash",
     "//garnet/packages/tests:svc",
@@ -1296,3 +1297,10 @@ group("catapult_converter") {
     "//garnet/bin/catapult_converter:host_catapult_converter_test($host_toolchain)",
   ]
 }
+
+group("sl4f") {
+  testonly = true
+  public_deps = [
+    "//sdk/testing/sl4f/client:tests",
+  ]
+}
diff --git a/sdk/testing/sl4f/client/BUILD.gn b/sdk/testing/sl4f/client/BUILD.gn
index 74ea35d6017d935a8dfaa21fb77c6c4845948486..9b3cc5214abdd38be9be570dfdf794ba4ec3ad18 100644
--- a/sdk/testing/sl4f/client/BUILD.gn
+++ b/sdk/testing/sl4f/client/BUILD.gn
@@ -3,6 +3,8 @@
 # found in the LICENSE file.
 
 import("//build/dart/dart_library.gni")
+import("//build/dart/test.gni")
+import("//build/testing/environments.gni")
 
 dart_library("client") {
   package_name = "sl4f"
@@ -26,3 +28,26 @@ dart_library("client") {
     "//third_party/dart-pkg/pub/meta",
   ]
 }
+
+dart_test("sl4f_client_tests") {
+  sources = [
+    "scenic_test.dart",
+  ]
+
+  deps = [
+    ":client",
+    "//third_party/dart-pkg/pub/image",
+    "//third_party/dart-pkg/pub/mockito",
+    "//third_party/dart-pkg/pub/test",
+  ]
+
+  environments = [ linux_env ]
+}
+
+group("tests") {
+  testonly = true
+
+  deps = [
+    ":sl4f_client_tests($host_toolchain)",
+  ]
+}
diff --git a/sdk/testing/sl4f/client/lib/src/scenic.dart b/sdk/testing/sl4f/client/lib/src/scenic.dart
index 285909ba6a34f619b51337fb29e48a4409589988..79d7b0abff473820da6971f11438919f69e5883a 100644
--- a/sdk/testing/sl4f/client/lib/src/scenic.dart
+++ b/sdk/testing/sl4f/client/lib/src/scenic.dart
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 import 'dart:convert' show base64Decode;
-import 'dart:typed_data' show Uint8List;
 
 import 'package:image/image.dart' show encodePng, Image;
 
@@ -30,8 +29,8 @@ class Scenic {
 
   /// Captures the screen of the device.
   ///
-  /// Returns an Image in RGBA format. If a [dumpName] is provided, the picture
-  /// is also dumped with that name as prefix.
+  /// Returns the screenshot as an [Image]. If a [dumpName] is provided, the
+  /// PNG is also dumped with that name as prefix.
   Future<Image> takeScreenshot({String dumpName}) async {
     final Map<String, dynamic> response =
         await _sl4f.request('scenic_facade.TakeScreenshot');
@@ -39,16 +38,8 @@ class Scenic {
 
     assert(info['pixel_format'], 'Bgra8');
 
-    final Uint8List bytes = base64Decode(response['data']);
-
-    // Image only takes RGB/RGBA so we need to reverse from BGRA
-    for (int quad = 0; quad < bytes.length; quad += 4) {
-      final blue = bytes[quad];
-      bytes[quad] = bytes[quad + 2];
-      bytes[quad + 2] = blue;
-    }
-
-    final image = Image.fromBytes(info['width'], info['height'], bytes);
+    final image = Image.fromBytes(
+        info['width'], info['height'], base64Decode(response['data']));
 
     if (dumpName != null) {
       _dump.writeAsBytes(dumpName, 'png', encodePng(image));
diff --git a/sdk/testing/sl4f/client/test/scenic_test.dart b/sdk/testing/sl4f/client/test/scenic_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..bf3c031305f3ab220a418e4575d026f10b9745de
--- /dev/null
+++ b/sdk/testing/sl4f/client/test/scenic_test.dart
@@ -0,0 +1,35 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:convert';
+
+import 'package:image/image.dart';
+import 'package:mockito/mockito.dart';
+import 'package:test/test.dart';
+
+import 'package:sl4f/sl4f.dart';
+
+class MockSl4f extends Mock implements Sl4f {}
+
+void main(List<String> args) {
+  // This is mostly an integration test against the Image package.
+  test('screenshot decodes to correct colors', () async {
+    final color = Color.fromRgba(12, 34, 56, 78);
+
+    final sl4f = MockSl4f();
+    when(sl4f.request('scenic_facade.TakeScreenshot'))
+        .thenAnswer((_) => Future.value({
+              'info': {'pixel_format': 'Bgra8', 'width': 1, 'height': 1},
+              'data': base64Encode([
+                getBlue(color),
+                getGreen(color),
+                getRed(color),
+                getAlpha(color)
+              ])
+            }));
+
+    final Image image = await Scenic(sl4f).takeScreenshot();
+    expect(image[0], color);
+  });
+}