私はすべてのご質問に決定的な答えを見つけることができなかったことを、事前に認めなければならないのに私は、この議論に私の2セントを追加します。
、なぜgetPixelFormat()
ピクセルあたり(RGBA様または4)3 バイトのフォーマットを返さない ?ディスプレイドライバの問題なのでしょうか? PixelFormat
〜RGBA_8888(またはアナログ)を設定することはできますか?
私はちょっとあなたがここで尋ねていることについて少し困惑しています。 getPixelFormat()
の戻り値は、アクティブなピクセル形式を識別する方法を提供する単なる整数です。数値に圧縮されたデータを表すことを意味するものではありません(例:MeasureSpec
)。残念ながら、私はあなたが期待したものとは異なるものが返される理由について説明していません。ハードウェアの観点からは制限がないように見えるか、またはネイティブ実装で定義された定数がJavaのものと一致しないため、OSの決定によるものです。 4
をピクセル形式に戻しているという事実は、モトローラが定義を混乱させた場合、必ずしも実際にはRGB_565であるとは限りません。サイドノートでは
:私は実際に前のAndroidにずれ定数の定義に遭遇しましたが、私は現在だけを確認するために、正確に...
を思い出すことができないが、それはピクセルをプリントアウトする価値があるかもしれません実行時にフォーマットの詳細。実際にJava PixelFormat
の値を使用していても一致しないネイティブ定数が定義されている場合、このように '実際の'形式を明らかにすることができます。 getPixelFormatInfo(int format, PixelFormat info)
メソッドを使用します。これは、単純にネイティブ実装の実際の値の取得を委任します。アンドロイド4.1(カスタムROM)で
、getPixelFormat()は5を返しますが、この 値は文書化されていないです。それは何のために立つのですか?
前述のように、ネイティブコードで定義された定数は、Javaのものと一致しないか、まったく定義されないことがあります。これはおそらくそのような場合です。あなたは、いくつかは、それが何を表すかを見つけるために掘り行う必要があるでしょうが、それはかなり簡単です:あなたはPixelFormat.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)
、あなたは見つけることができます彼らは非常にうまく(彼らがすべきである)追加します。また、謎の5
の意味を示しています。これはBGRA_8888です。 RGBA_8888の変形です。
ちなみに、上記のgetPixelFormatInfo(...)
メソッドを使用して、この整数値のピクセル形式の詳細を、識別子として5
を渡して判断してみてください。何が返されるのか興味深いでしょう。私はそれがBGRA_8888の定義に一致する値を示すことを期待しており、Motorolaのボード上のリンクされた議論で与えられたものと同様であることを期待しています。
あなたの答えに感謝します。私はあなたに賞金を授与しました。 – ArtemStorozhuk
@アスター:あなたを助けてくれてありがとう。私の提案を何とかしようとしましたか?実際に返されるデータが何であるかは興味があります。 –
getPixelFormatInfoは、結果をBitPerPixel(32)とbytesPerPixel(4)の2つのフィールドを持つPixelFormatオブジェクトに格納します。 – xastor