1
1
package com .google_mlkit_commons ;
2
2
3
3
import android .content .Context ;
4
+ import android .graphics .ImageFormat ;
4
5
import android .net .Uri ;
5
6
import android .util .Log ;
6
7
@@ -17,8 +18,8 @@ public class InputImageConverter {
17
18
18
19
//Returns an [InputImage] from the image data received
19
20
public static InputImage getInputImageFromData (Map <String , Object > imageData ,
20
- Context context ,
21
- MethodChannel .Result result ) {
21
+ Context context ,
22
+ MethodChannel .Result result ) {
22
23
//Differentiates whether the image data is a path for a image file or contains image data in form of bytes
23
24
String model = (String ) imageData .get ("type" );
24
25
InputImage inputImage ;
@@ -29,7 +30,7 @@ public static InputImage getInputImageFromData(Map<String, Object> imageData,
29
30
} catch (IOException e ) {
30
31
Log .e ("ImageError" , "Getting Image failed" );
31
32
Log .e ("ImageError" , e .toString ());
32
- result .error ("InputImageConverterError" , e .toString (), null );
33
+ result .error ("InputImageConverterError" , e .toString (), e );
33
34
return null ;
34
35
}
35
36
} else {
@@ -39,16 +40,27 @@ public static InputImage getInputImageFromData(Map<String, Object> imageData,
39
40
Map <String , Object > metaData = (Map <String , Object >) imageData .get ("metadata" );
40
41
41
42
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 ;
48
60
} catch (Exception e ) {
49
61
Log .e ("ImageError" , "Getting Image failed" );
50
62
Log .e ("ImageError" , e .toString ());
51
- result .error ("InputImageConverterError" , e .toString (), null );
63
+ result .error ("InputImageConverterError" , e .toString (), e );
52
64
return null ;
53
65
}
54
66
} else {
0 commit comments