11package com .google_mlkit_commons ;
22
33import android .content .Context ;
4+ import android .graphics .ImageFormat ;
45import android .net .Uri ;
56import android .util .Log ;
67
@@ -17,8 +18,8 @@ public class InputImageConverter {
1718
1819 //Returns an [InputImage] from the image data received
1920 public static InputImage getInputImageFromData (Map <String , Object > imageData ,
20- Context context ,
21- MethodChannel .Result result ) {
21+ Context context ,
22+ MethodChannel .Result result ) {
2223 //Differentiates whether the image data is a path for a image file or contains image data in form of bytes
2324 String model = (String ) imageData .get ("type" );
2425 InputImage inputImage ;
@@ -29,7 +30,7 @@ public static InputImage getInputImageFromData(Map<String, Object> imageData,
2930 } catch (IOException e ) {
3031 Log .e ("ImageError" , "Getting Image failed" );
3132 Log .e ("ImageError" , e .toString ());
32- result .error ("InputImageConverterError" , e .toString (), null );
33+ result .error ("InputImageConverterError" , e .toString (), e );
3334 return null ;
3435 }
3536 } else {
@@ -39,16 +40,27 @@ public static InputImage getInputImageFromData(Map<String, Object> imageData,
3940 Map <String , Object > metaData = (Map <String , Object >) imageData .get ("metadata" );
4041
4142 assert metaData != null ;
42- inputImage = InputImage .fromByteArray ((byte []) Objects .requireNonNull (imageData .get ("bytes" )),
43- Double .valueOf (Objects .requireNonNull (metaData .get ("width" )).toString ()).intValue (),
44- Double .valueOf (Objects .requireNonNull (metaData .get ("height" )).toString ()).intValue (),
45- Integer .parseInt (Objects .requireNonNull (metaData .get ("rotation" )).toString ()),
46- Integer .parseInt (Objects .requireNonNull (metaData .get ("image_format" )).toString ()));
47- return inputImage ;
43+ byte [] data = (byte []) Objects .requireNonNull (imageData .get ("bytes" ));
44+ int imageFormat = Integer .parseInt (Objects .requireNonNull (metaData .get ("image_format" )).toString ());
45+ int rotationDegrees = Integer .parseInt (Objects .requireNonNull (metaData .get ("rotation" )).toString ());
46+ int width = Double .valueOf (Objects .requireNonNull (metaData .get ("width" )).toString ()).intValue ();
47+ int height = Double .valueOf (Objects .requireNonNull (metaData .get ("height" )).toString ()).intValue ();
48+ if (imageFormat == ImageFormat .NV21 || imageFormat == ImageFormat .YV12 ) {
49+ return InputImage .fromByteArray (
50+ data ,
51+ width ,
52+ height ,
53+ rotationDegrees ,
54+ imageFormat );
55+ }
56+ result .error ("InputImageConverterError" , "ImageFormat is not supported." , null );
57+ // TODO: Use InputImage.fromMediaImage, which supports more types, e.g. IMAGE_FORMAT_YUV_420_888.
58+ // See https://developers.google.com/android/reference/com/google/mlkit/vision/common/InputImage#fromMediaImage(android.media.Image,%20int)
59+ return null ;
4860 } catch (Exception e ) {
4961 Log .e ("ImageError" , "Getting Image failed" );
5062 Log .e ("ImageError" , e .toString ());
51- result .error ("InputImageConverterError" , e .toString (), null );
63+ result .error ("InputImageConverterError" , e .toString (), e );
5264 return null ;
5365 }
5466 } else {
0 commit comments