出个题目:如何把颜色的十六进制值,赋值给:Color.r .
c4droid吧
全部回复
仅看楼主
level 13
savage200
楼主
出个题目:如何把颜色的十六进制值,赋值给:Color.r .g .b .a变量?要求高效。
我先来一个:
long c=0xffffffff;
printf("r:%d,g:%d,b:%d,a:%d\n%x",(char)(c>>8*3),(char)(c>>8*2),(char)(c>>8),(char)c,c);
还有没有更好的思路?
2017年12月22日 04点12分
1
level 13
savage200
楼主
学这个,居然发现我的cpu是小端的
2017年12月22日 09点12分
2
level 9
飞舞云尖
union C_Color{
struct {char a;
char b;
char g;
char r;
};
int color;};
可以吗
2017年12月22日 13点12分
3
savage200
2017年12月22日 14点12分
level 13
savage200
楼主
规范下重发↓↓↓↓↓↓↓↓↓
#include <stdio.h>
struct COLOR
{
char r,g,b,a;
};
int hex2color(long &hex,COLOR *color)
{
static union
{
char c[4];
unsigned long mylong;
} endian_test = {{'l', '?', '?', 'b'}};
#define ENDIANNESS ((char)endian_test.mylong)
if (ENDIANNESS == 'l')
{
struct s_c
{
char a, b, g, r;
};
s_c *tem_color = (s_c*)&hex;
color->r=tem_color->r;
color->g=tem_color->g;
color->b=tem_color->b;
color->a=tem_color->a;
return 0;
}
else
{
COLOR *tem_color=(COLOR*)&hex;
color->r=tem_color->r;
color->g=tem_color->g;
color->b=tem_color->b;
color->a=tem_color->a;
return 1;
}
}
int main()
{
long hex = 0xffffffff;
COLOR color;
hex2color(hex,&color);
printf("color:%x\nr:%x,g:%x,b:%x,a:%x",hex, color.r, color.g, color.b,
color.a);
}
2017年12月22日 14点12分
5
一周休七日
楼主发这种c不c、c++不c++的代码是要闹哪样?
2017年12月22日 15点12分
savage200
@一周休七日
哪里看到c++了?
2017年12月22日 16点12分
level 13
savage200
楼主
2017年12月22日 14点12分
6
level 13
savage200
楼主
#include <stdio.h>
//#include <stdlib.h>
union COLOR
{
struct
{
char r, g, b, a;
};
unsigned long val;
COLOR() {};
COLOR(const long &hex)
{
static union
{
char c[4 ];
unsigned long mylong;
} endian_test = {{'l', '?', '?', 'b'}};
#define ENDIANNESS ((char)endian_test.mylong)
switch (ENDIANNESS)
{
case 'l':
{
COLOR *color = (COLOR *) & hex;
this->r = color->a;
this->g = color->b;
this->b = color->g;
this->a = color->r;
break;
}
case 'b':
{
this->val=hex;
//memcpy(this, &hex, sizeof(hex));
break;
}
default:
this->val=hex;
break;
}
}
};
2017年12月25日 16点12分
19
savage200
COLOR color = 0xadefddaa
2017年12月25日 16点12分
1