首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法找到PixelFormat Enum for Xamarin Android

无法找到PixelFormat Enum for Xamarin Android
EN

Stack Overflow用户
提问于 2018-11-11 21:54:00
回答 3查看 344关注 0票数 3

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

我找不到图书馆,也找不到它的英语课程。

代码语言:javascript
复制
mImageReader = ImageReader.NewInstance(windowWidth, windowHeight, ImageFormatType.Rgb565, 2)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-11 22:29:46

您需要将3 (Android.Graphics.Format.Rgb888)的int值传递给ImageReader.NewInstance,但目前不能。

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

您可以通过Xamarin.android与Android.Runtime.JNIEnv或Java.Lang.Reflect的绑定在Java中这样做

使用JNI的示例:

注意:使用JNI要求允许程序集使用“不安全”代码(从好的方面说,JNI比使用反射更快.)

代码语言:javascript
复制
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);
    }
}

用法:

代码语言:javascript
复制
var imageReader = ImageReaderEx.NewInstance(1, 1, 3, 1);

代码语言:javascript
复制
var ImageReader = ImageReaderEx.NewInstance(1, 1, Android.Graphics.Format.Rgb888, 1);
票数 0
EN

Stack Overflow用户

发布于 2018-11-11 22:21:43

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

票数 0
EN

Stack Overflow用户

发布于 2021-08-23 15:31:19

另一种选择是使用

代码语言:javascript
复制
var imageReader = ImageReader.NewInstance(_mWidth, _mHeight, (ImageFormatType)Format.Rgba8888, 2);

对我来说很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53253632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档