Вам нужно передать значение типа 3
(Android.Graphics.Format.Rgb888
) в ImageReader.NewInstance
, но в настоящее время вы не можете.
Это ошибка / проблема в процессе API автоматической генерации Xamarin.Android, так как они не создают перегрузку, которая принимает перечисление Android.Graphics.Format
или просто int
, как API Java.
Вы можете сделать это так же, как в Java через привязку Xamarin.Android к Android.Runtime.JNIEnv или Java.Lang.Reflect
Пример использования JNI:
Примечание: использование JNI требует, чтобы сборка позволяла использовать «небезопасный» код (с положительной стороны, JNI выполняется быстрее, чем при использовании отражения ...)
public static class ImageReaderEx
{
public unsafe static ImageReader NewInstance(int width, int height, Android.Graphics.Format format, int maxImages)
{
JniArgumentValue* ptr = stackalloc JniArgumentValue[4];
*ptr = new JniArgumentValue(width);
ptr[1] = new JniArgumentValue(height);
ptr[2] = new JniArgumentValue((int)format);
ptr[3] = new JniArgumentValue(maxImages);
JniPeerMembers _members = new XAPeerMembers("android/media/ImageReader", typeof(ImageReader));
return Java.Lang.Object.GetObject<ImageReader>(_members.StaticMethods.InvokeObjectMethod("newInstance.(IIII)Landroid/media/ImageReader;", ptr).Handle, JniHandleOwnership.TransferLocalRef);
}
public unsafe static ImageReader NewInstance(int width, int height, int format, int maxImages)
{
JniArgumentValue* ptr = stackalloc JniArgumentValue[4];
*ptr = new JniArgumentValue(width);
ptr[1] = new JniArgumentValue(height);
ptr[2] = new JniArgumentValue(format);
ptr[3] = new JniArgumentValue(maxImages);
JniPeerMembers _members = new XAPeerMembers("android/media/ImageReader", typeof(ImageReader));
return Java.Lang.Object.GetObject<ImageReader>(_members.StaticMethods.InvokeObjectMethod("newInstance.(IIII)Landroid/media/ImageReader;", ptr).Handle, JniHandleOwnership.TransferLocalRef);
}
}
Использование:
var imageReader = ImageReaderEx.NewInstance(1, 1, 3, 1);
или
var ImageReader = ImageReaderEx.NewInstance(1, 1, Android.Graphics.Format.Rgb888, 1);