gpt4 book ai didi

将 float RGBA 转换为 int RGB

转载 作者:行者123 更新时间:2023-11-30 21:23:54 25 4
gpt4 key购买 nike

我有一个从 0 到 1 的 float RGBA。我想将其转换为 int rgb

class Color
{
public:
float R, G, B, A;

Color(float r = 1.0f, float g = 1.0f, float b = 1.0f, float a = 1.0f);
}

最佳答案

[已编辑]由于后来“我想将 32 位 RGBA 转换为 8 位 R2G4B2”

[再次编辑]由于“我在嵌入式系统上使用它,所以不允许静态转换”

[编辑更多]由于“我使用的是 c99 编译器” - 所以没有 C++

struct Color
{
float R, G, B, A;
}

int RGBAstructTo8bitRGB(const Color* color) {
if(NULL==color) { return 0; /* black */
unsigned r=(int)(3*(color->R < 0 ? 0 : this->R));
unsigned g=(int)(7*(color->G < 0 ? 0 : this->G));
unsigned b=(int)(3*(color->B < 0 ? 0 : this->B));
return (r<<6) | (g<<2) | b;
}
int RGBATo8bitRGB(float R, float G, float B) {
unsigned r=(int)(3*(R < 0 ? 0 : this->R));
unsigned g=(int)(7*(G < 0 ? 0 : this->G));
unsigned b=(int)(3*(B < 0 ? 0 : this->B));
return (r<<6) | (g<<2) | b;
}

void 8bitRGBtoRGBAstruct(int color, struct Color* dest) {
if(NULL!=dest) {
dest->R=(float)((color & 0x03)/3.0);
dest->G=(float)(((color >> 2) & 0x07)/7.0);
dest->B=(float)(((color >> 6) & 0x03)/3.0);
}
}
<小时/>

对于 24 位 RGB:

忽略A,将组件缩放为[0,255],将它们移位或转换为整数:

class Color
{
public:
float R, G, B, A;

int toRGB() const {
unsigned r=(int)(255*(this->R < 0 ? 0 : this->R));
unsigned g=(int)(255*(this->G < 0 ? 0 : this->G));
unsigned b=(int)(255*(this->B < 0 ? 0 : this->B));
return (r<<16) | (g<<8) | b;
}
}

关于将 float RGBA 转换为 int RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40313503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com