我只是我的兩分錢加入討論,雖然我應提前承認,我無法找到確鑿你所有的問題。
那麼,爲什麼getPixelFormat()
不會每像素3(或4類似RGBA) 字節返回格式?它是顯示驅動程序問題還是什麼?我可以設置 PixelFormat
至RGBA_8888(或模擬)嗎?
我對你到底在問什麼有點困惑。 getPixelFormat()
的返回值只是一個整數,它提供了一種識別活動像素格式的方法;它並不意味着代表壓縮成數字的任何數據(例如與MeasureSpec
一樣)。不幸的是,我沒有解釋爲什麼不同的產品會返回比您預期的要多。我最好的猜測應該是由於操作系統的決定,因爲從硬件角度來看似乎沒有限制,或者本地實現中定義的常量與Java中的常量不匹配。事實上,如果摩托羅拉搞砸了這些定義,那麼您以像素格式獲得4
並不一定意味着它確實是RGB_565。
在一個側面說明:其實我已經遇到之前的Android錯位常量定義,雖然我目前還不能記得究竟在何處?
只是爲了確認,它可能是值得打印出像素運行時格式細節。如果確實定義了一個使用Java值但不匹配的本地常量,則可以通過這種方式顯示「真實」格式。使用getPixelFormatInfo(int format, PixelFormat info)
方法,該方法只是委託從本地實現中檢索實際值。
在Android 4.1(自定義ROM)上,getPixelFormat()返回5.但是這個 值沒有記錄。它代表什麼?
如前所述,有時在本地代碼中定義的常量與在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定義的值,因此類似於摩托羅拉板上鍊接討論中給出的值。
感謝您的回答 - 我向您頒發了一筆賞金。 – ArtemStorozhuk 2012-08-23 10:54:05
@Astor:很高興幫助你。你有沒有嘗試我的任何建議?我會有興趣看看實際返回的數據。 – 2012-08-25 04:58:23
的getPixelFormatInfo放在一個的PixelFormat對象,它具有2個字段其結果:bitsPerPixel(32)和bytesPerPixel(4)。 – xastor 2012-09-28 19:01:55