无法找到Xamarin Android的PixelFormat枚举



我有下面的代码,我正在xamarin android中创建一个ImageReader实例,如何将图像格式从ImageFormatType.Rgb565更改为PixelFormat.RGBA_8888

我找不到库或它的枚举类。

mImageReader = ImageReader.NewInstance(windowWidth, windowHeight, ImageFormatType.Rgb565, 2)

您需要将一个int值3(Android.Graphics.Format.Rgb888(传递给ImageReader.NewInstance,但目前无法。

这是Xamarin.Android自动生成API过程中的一个错误/问题,因为它们不会创建接受Android.Graphics.Format枚举的重载,或者像Java API那样只创建普通int

你可以通过Xamarin以与Java相同的方式完成这项工作。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);

在Xamarin中,它的Format.Rgba8888(小写(。医生在这里

另一个选项是使用这个:

var imageReader = ImageReader.NewInstance(_mWidth, _mHeight, (ImageFormatType)Format.Rgba8888, 2);

它对我有用。

相关内容

  • 没有找到相关文章

最新更新