首页 > 解决方案 > 将输入的像素 uchar4 向量转换为一个 int 值

问题描述

在我的渲染脚本文件中,我有以下内核函数:

uchar4 RS_KERNEL applyRGBProcessing(uchar4 in){


}

您可能知道:参数uchar4 in表示具有 4 个值的向量。在我的例子中,它代表一个来自位图的像素。我怎样才能把它uchar4变成一个正常的int?我问的原因是我想在该内核函数的主体中应用以下公式:

pixels[i] = (0xFF000000 & pixels[i]) | (R[(pixels[i] >> 16) & 0xFF]) | (G[(pixels[i] >> 8) & 0xFF]) | (B[pixels[i] & 0xFF]);

因此,我们对pixel[i]. 但我不能简单地pixel[i]用我的in参数替换 the ,因为pixel[i]它是intandin类型uchar4

当然,我必须返回 uchar4。所以我必须要:

我怎么能那样做?

更新:

到目前为止我的解决方案(效果不太好,整个屏幕变成蓝色):

uchar4 RS_KERNEL applyRGBCurve(uchar4 in){

    int red = in.r;
    int green = in.g;
    int blue = in.b;
    int alpha = in.a;

    int pixel = alpha | red | green | blue;

    uchar4 out;
    out.a = (0xFF000000 & pixel);
    out.r = R[(pixel >> 16) & 0xFF];
    out.g = G[(pixel >> 8) & 0xFF];
    out.b = B[pixel & 0xFF];

    return out;
}

标签: androidbitmappixelrenderscript

解决方案


可能没有必要转换为 int 并返回 uchar4 - 您尝试应用的公式似乎只是将 int 解释为 ARGB 顺序中的四个字节。您的输入可能以 ABGR 顺序存储(请参见此处),因此您可以尝试:

uchar4 RS_KERNEL applyRGBCurve(uchar4 in){

   uchar4 out;

   out.a = in.a;
   out.r = in.b;
   out.g = in.g;
   out.b = in.r;

   return out;
}

推荐阅读