簡體   English   中英

如何創建一個ARGB_8888像素值?

[英]How to create an ARGB_8888 pixel value?

假設我要創建一個像素值數組,以傳遞到此處描述的createBitmap方法中。 我有三個int值r, g, b ,范圍為0-0xff。 如何將它們轉換為不透明像素p

alpha通道進入高字節還是低字節?

我用谷歌搜索了文檔,但是只聲明了:

每個像素存儲在4個字節上。 每個通道(RGB和alpha表示半透明)均以8位精度(256個可能的值)進行存儲。此配置非常靈活,可提供最佳質量。 應盡可能使用它。

那么,該怎么寫呢?

int createPixel(int r, int g, int b)
{
  return ?
}

看來RGBA像素格式已被很好地記錄下來,我假設這就是Android文檔的含義,只是使用一個不同的名稱來匹配bit字段中的通道成員資格位置:

在此處輸入圖片說明

這樣的事情應該起作用:

int createPixel(int r, int g, int b) {
  return createPixel(r, g, b, 0xff);
}

int createPixel(int r, int g, int b, int a) {
  return (a<<24) | (r<<16) | (g<<8) | b;
}

另外,您可能希望使用byte而不是int以避免溢出類型錯誤,或僅屏蔽所需的位:

int createPixel(int r, int g, int b, int a) {
  return ((a & 0xff) << 24)
       | ((r & 0xff) << 16)
       | ((g & 0xff) << 8)
       | ((b & 0xff));
}

盡管將值限制為[0,255]可能更有意義。

文檔

(alpha << 24) | (red << 16) | (green << 8) | blue

首先,您的參數應該是字節,而不是整數,但是我想這可能是實現問題。

一般來說,您會做類似的事情

return b | r<<8 | g<<16 | 255<<24;

假設您的Alpha為255(非透明)。

這應該工作:

int createPixel(int r, int g, int b)
{
    return 0xff000000 | (r << 16) | (g << 8) | b;
}

或者,如果您想成為巴洛克風格:

int createPixel(int r, int g, int b)
{
    return (((((-1 << 8) | r) << 8) | g) << 8) | b;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM