android - 将输入的像素 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]
它是int
andin
类型uchar4
。
当然,我必须返回 uchar4。所以我必须要:
- 把它转换成某事。合适的
- 进行换档并与
- 将其重新转换回 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;
}
解决方案
可能没有必要转换为 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;
}
推荐阅读
- javascript - 将 VBA 宏以重新排序列转换为 JavaScript/Google 应用程序脚本
- datatables - 我在我的项目 mvc 中使用数据表,我想在表课程中显示类别名称来代替类别 ID 外键
- powershell - 使用 powershell 创建计划任务
- python - (Errno 2:找不到文件)在谷歌云部署时的 python 烧瓶
- javascript - Google Timezone api 无效的时间戳参数
- angular - Angular 服务提供在:从库导入的根引发 NullInjectorError
- azure - Azure CLI 作为打开 SSH 的基础映像
- flutter - 如何将新图标添加到从 fluttericon.com 生成的现有 AppIcons 类
- python - 使用 Python 将 Blob 从一个存储帐户复制到另一个存储帐户
- html - 通过单击图标向表中添加新行