- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我对 PixelFormat 感到困惑在安卓系统上。
我的设备是摩托罗拉 Defy。
我有两个问题:
getWindowManager().getDefaultDisplay().getPixelFormat()
返回 4 代表 RGB_565 .据我所知,我的设备有 16M 种颜色,这意味着每个像素 3 个(或 4 个具有 alpha channel 的)字节:2^(8*3) = 2^24 = 16M
但是 RGB_565
格式每个像素有 2 个字节(16 位),代表 65K 颜色:
2^(8*2) = 2^16 = 65K
那么,为什么 getPixelFormat()
不返回每个像素 3(或 4,如 RGBA)字节的格式?是显示驱动问题还是什么?我可以将 PixelFormat
设置为 RGBA_8888 吗? (或模拟)?
getPixelFormat()
返回 5。但是这个值没有记录。它代表什么?实际上,在这种情况下效果与常量 4
相同。但是来自this discussion我发现 5 代表 RGBA_8888
(但没有证据证明该说法)。那么我怎样才能弄清楚设备屏幕的真实格式呢?我还发现了一台 Android 2.2 的中国设备,它也有 PixelFormat
5,但真正的格式是 4(如我的摩托罗拉)。我用谷歌搜索了这些问题,但一无所获。我唯一发现的是 nexus 7 also has 5 format .
更新:
我找到了方法 getWindow().setFormat()
但它实际上并没有改变主要像素格式。
最佳答案
我将在本次讨论中加入我的两分钱,但我应该事先承认,我无法为您的所有问题找到决定性的答案。
So, why
getPixelFormat()
doesn't return format with 3 (or 4 like RGBA) bytes per pixel? Is it display driver problems or something? Can I setPixelFormat
to RGBA_8888 (or analogue)?
我有点不明白你到底在问什么。 getPixelFormat()
的返回值只是一个整数,它提供了一种识别 Activity 像素格式的方法;它并不代表任何压缩成数字的数据(例如 MeasureSpec
)。不幸的是,我没有解释为什么返回的结果与您预期的不同。我最好的猜测是它要么是由于操作系统的决定,因为从硬件的角度来看似乎没有限制,要么是 native 实现中定义的常量与 Java 中定义的常量不匹配。如果摩托罗拉搞砸了定义,那么您返回 4
作为像素格式的事实并不一定意味着它真的是 RGB_565。
旁注:我之前在 Android 中确实遇到过未对齐的常量定义,尽管我目前记不起具体位置......
只是为了确认,可能值得在运行时打印出像素格式的详细信息。如果确实定义了使用 Java PixelFormat
值但不匹配的 native 常量,则您可能会以这种方式显示“真实”格式。使用 getPixelFormatInfo(int format, PixelFormat info)
方法,它只是委托(delegate)从 native 实现中检索实际值。
On Android 4.1 (custom rom), getPixelFormat() returns 5. But this value is undocumented. What does it stand for?
如前所述,有时 native 代码中定义的常量与 Java 中的常量不匹配,或者根本没有定义。大概就是这样的情况。您必须进行一些挖掘才能找出它代表什么,但这相当简单:
/**
* pixel format definitions
*/
enum {
HAL_PIXEL_FORMAT_RGBA_8888 = 1,
HAL_PIXEL_FORMAT_RGBX_8888 = 2,
HAL_PIXEL_FORMAT_RGB_888 = 3,
HAL_PIXEL_FORMAT_RGB_565 = 4,
HAL_PIXEL_FORMAT_BGRA_8888 = 5,
HAL_PIXEL_FORMAT_RGBA_5551 = 6,
HAL_PIXEL_FORMAT_RGBA_4444 = 7,
/* 0x8 - 0xF range unavailable */
HAL_PIXEL_FORMAT_YCbCr_422_SP = 0x10, // NV16
HAL_PIXEL_FORMAT_YCrCb_420_SP = 0x11, // NV21 (_adreno)
HAL_PIXEL_FORMAT_YCbCr_422_P = 0x12, // IYUV
HAL_PIXEL_FORMAT_YCbCr_420_P = 0x13, // YUV9
HAL_PIXEL_FORMAT_YCbCr_422_I = 0x14, // YUY2 (_adreno)
/* 0x15 reserved */
HAL_PIXEL_FORMAT_CbYCrY_422_I = 0x16, // UYVY (_adreno)
/* 0x17 reserved */
/* 0x18 - 0x1F range unavailable */
HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED = 0x20, // NV12_adreno_tiled
HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x21, // NV12
HAL_PIXEL_FORMAT_YCrCb_420_SP_TILED = 0x22, // NV21_adreno_tiled
HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x23, // NV61
HAL_PIXEL_FORMAT_YCrCb_422_P = 0x24, // YV12 (_adreno)
};
Source: hardware.h
(lines 121-148)
如果您将这些值与 PixelFormat.java
中定义的值进行比较,您会发现它们相加得很好(它们应该如此)。也说明了神秘的5
的含义,即BGRA_8888; RGBA_8888 的变体。
顺便说一句,您可能想尝试使用上述 getPixelFormatInfo(...)
方法通过传入 5
来确定此整数值的像素格式详细信息标识符。看看返回的内容会很有趣。我希望它显示与 BGRA_8888 定义相匹配的值,因此类似于摩托罗拉董事会上的链接讨论中给出的值。
关于android - 对 PixelFormat 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949709/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!