jssd 发表于 2018-9-15 22:03:08

求助:求WS2812彩灯灯光效果算法或者软件

因项目用到WS2812彩灯,编灯光效果的时候发现很麻烦,而且用的数组(如下),很占空间(虽然空间足够),但如果增加减少效果很费劲。所以求助万能的坛子,有没有好用的一些算法或者软件编辑效果的。
另外,项目上的界面是这样的自定义效果,基于什么算法,一直搞不明白,比如那个混合颜色是什么鬼?

/*********************************** 外圈花样定义 *************************************/
const uint8_t rgbO_Mono[] =        //r
                                                                {{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                //r
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                //g
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                //g
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}       
                                                                //b
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00}       
                                                                //b
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff}                                                               
                                                                };
                                                               
const uint8_t rgbO_Move[] =        //r6
                                                                {{0xff,0x00,0x00},{0xf0,0x00,0x00},{0xe1,0x00,0x00},{0xd2,0x00,0x00}
                                                                ,{0xc3,0x00,0x00},{0xb4,0x00,0x00},{0xa5,0x00,0x00},{0x96,0x00,0x00}
                                                                ,{0x87,0x00,0x00},{0x78,0x00,0x00},{0x69,0x00,0x00},{0x5a,0x00,0x00}
                                                                ,{0x4b,0x00,0x00},{0x3c,0x00,0x00},{0x2d,0x00,0x00},{0x1e,0x00,0x00}
                                                               
                                                                ,{0x00,0xff,0x00},{0x00,0xf0,0x00},{0x00,0xe1,0x00},{0x00,0xd2,0x00}
                                                                ,{0x00,0xc3,0x00},{0x00,0xb4,0x00},{0x00,0xa5,0x00},{0x00,0x96,0x00}
                                                                ,{0x00,0x87,0x00},{0x00,0x78,0x00},{0x00,0x69,0x00},{0x00,0x5a,0x00}
                                                                ,{0x00,0x4b,0x00},{0x00,0x3c,0x00},{0x00,0x2d,0x00},{0x00,0x1e,0x00}
                                                               
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0xf0},{0x00,0x00,0xe1},{0x00,0x00,0xd2}
                                                                ,{0x00,0x00,0xc3},{0x00,0x00,0xb4},{0x00,0x00,0xa5},{0x00,0x00,0x96}
                                                                ,{0x00,0x00,0x87},{0x00,0x00,0x78},{0x00,0x00,0x69},{0x00,0x00,0x5a}
                                                                ,{0x00,0x00,0x4b},{0x00,0x00,0x3c},{0x00,0x00,0x2d},{0x00,0x00,0x1e}
                                                                };
       
/*********************************** 中间花样定义 *************************************/
//数字0~9
const uint8_t rgbM_Num[] =        //0
                                                                {{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //1
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //2
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //3
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //4
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //5
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //6
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //7
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //8
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                        //9
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                };

const uint8_t rgbM_Pattern1[] =        //花样1   内向外扩散
                                                                {{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x55,0x55,0x55},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                //
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x55,0x55,0x55},{0x00,0x00,0x00},{0x55,0x55,0x55},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //
                                                                ,{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55}
                                                                ,{0x55,0x55,0x55},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x55,0x55,0x55}
                                                                ,{0x55,0x55,0x55},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x55,0x55,0x55}
                                                                ,{0x55,0x55,0x55},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x55,0x55,0x55}
                                                                ,{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55},{0x55,0x55,0x55}
                                                                        //r
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //r
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //r
                                                                ,{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0xff,0x00,0x00}
                                                                ,{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00},{0xff,0x00,0x00}
                                                                        //g
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //g
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //g
                                                                ,{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0xff,0x00}
                                                                ,{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00},{0x00,0xff,0x00}
                                                                        //b
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //b
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0x00}
                                                                ,{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00}
                                                                        //b
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0x00},{0x00,0x00,0xff}
                                                                ,{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff},{0x00,0x00,0xff}
                                                                };
                                                               
/************************** 底层初始化 ******************************************/

bbandpp 发表于 2018-9-15 22:09:51

见过最牛逼的用stm8f003带1024个灯珠,可以做很多花样和速度的

jssd 发表于 2018-9-15 22:11:43

bbandpp 发表于 2018-9-15 22:09
见过最牛逼的用stm8f003带1024个灯珠,可以做很多花样和速度的

我现在用的是STM32F103RET6,定时器PWM+DMA驱动,
空间什么的够用,差在效果的算法。。。搞了好久了。。

nanfang2000 发表于 2018-9-15 22:18:33

jssd 发表于 2018-9-15 22:11
我现在用的是STM32F103RET6,定时器PWM+DMA驱动,
空间什么的够用,差在效果的算法。。。搞了好久了。。 ...

搞个Python脚本生成吧,或者搞个图形工具来生成。因为效果太多了,估计没有现成的简单工具帮你

BWT,你们要什么效果?

bbandpp 发表于 2018-9-15 22:19:41

jssd 发表于 2018-9-15 22:11
我现在用的是STM32F103RET6,定时器PWM+DMA驱动,
空间什么的够用,差在效果的算法。。。搞了好久了。。 ...

这个核心就是在内置的效果上

jssd 发表于 2018-9-15 22:22:59

nanfang2000 发表于 2018-9-15 22:18
搞个Python脚本生成吧,或者搞个图形工具来生成。因为效果太多了,估计没有现成的简单工具帮你

BWT,你 ...

就是一般机台比较炫的效果,比如渐变,闪,转,七彩。。。之类的。。。。
这些我的想法是用固定的数组编好,然后读。。。
但好像匹配不上楼主位的那个界面,主要是混合色不知道怎样处理。。。难道定义另一个数组叠加上去?

bbandpp 发表于 2018-9-15 22:24:41

混色是背景色的含义吧,估计只能加数组了

jssd 发表于 2018-9-15 22:24:58

bbandpp 发表于 2018-9-15 22:19
这个核心就是在内置的效果上

确实,看别人几百几千种效果,也不知是怎样弄出来的?难不成一个一个数组慢慢弄?想想觉得有点可怕。。。

bbandpp 发表于 2018-9-15 22:34:29

jssd 发表于 2018-9-15 22:24
确实,看别人几百几千种效果,也不知是怎样弄出来的?难不成一个一个数组慢慢弄?想想觉得有点可怕。。。 ...

这种内推的,应该不会有这么多模式的,一般也就5,6种模式就够了

aammoo 发表于 2018-9-15 22:41:01

arduino的这个库不错
https://github.com/kitesurfer1404/WS2812FX

nanfang2000 发表于 2018-9-15 22:59:39

jssd 发表于 2018-9-15 22:24
确实,看别人几百几千种效果,也不知是怎样弄出来的?难不成一个一个数组慢慢弄?想想觉得有点可怕。。。 ...

换个思路,把灯条看成屏幕,放电影
做成动画编辑那种专业软件,一帧一帧的,想怎么搞都行。就是比较耗存储。
有人给过我一个灯光效果的播放文件,几百MB,打开看其实就是一帧一帧的数据。。。

jssd 发表于 2018-9-15 23:27:47

aammoo 发表于 2018-9-15 22:41
arduino的这个库不错
https://github.com/kitesurfer1404/WS2812FX

看起来不错,可是看不懂。。。惭愧了。。{:3_60:}

jssd 发表于 2018-9-15 23:34:27

nanfang2000 发表于 2018-9-15 22:59
换个思路,把灯条看成屏幕,放电影
做成动画编辑那种专业软件,一帧一帧的,想怎么搞都行。就是比较耗存 ...

我也是倾向这种,准备写一个小软件,从上到下读一张张彩色图片像素RGB值,存成数组,刷屏时就按这个一帧帧刷,模式搞几种,比如静态,移动,闪烁(也可以看成速度很慢的移动),渐变。。。
只是这样搞,楼主位的混合色不知道怎样搞。。。

nanfang2000 发表于 2018-9-15 23:38:12

jssd 发表于 2018-9-15 23:34
我也是倾向这种,准备写一个小软件,从上到下读一张张彩色图片像素RGB值,存成数组,刷屏时就按这个一帧 ...

不太明白楼主位这个图什么意思,混合色什么意思。。难道意思不是纯色?

jssd 发表于 2018-9-16 09:58:39

nanfang2000 发表于 2018-9-15 23:38
不太明白楼主位这个图什么意思,混合色什么意思。。难道意思不是纯色? ...

我也不知道,现在我把基本色当底色,然后叠加上混合色。也就是两组数组了。。。

not_at_all 发表于 2018-9-16 10:59:22

渐变色用HSL做算法再转回RGB显示啊!

Pupil 发表于 2018-9-16 16:31:24

有个来源的库忘了叫什么了可以实现很多效果

Pupil 发表于 2018-9-16 16:31:48

用的是spi+dma驱动

kakarotto 发表于 2018-9-16 20:26:38

jssd 发表于 2018-9-15 22:11
我现在用的是STM32F103RET6,定时器PWM+DMA驱动,
空间什么的够用,差在效果的算法。。。搞了好久了。。 ...

SPI+DMA可以很高效的驱动,spi速度设置为合适的频率,1bit变成3bit就可以。

jssd 发表于 2018-9-16 20:34:37

kakarotto 发表于 2018-9-16 20:26
SPI+DMA可以很高效的驱动,spi速度设置为合适的频率,1bit变成3bit就可以。

sip也弄过,确实是可以,只是有一个我不是很满意,多了几个没用的IO脚,pwm只要一个io就行

jssd 发表于 2018-9-16 20:35:16

Pupil 发表于 2018-9-16 16:31
有个来源的库忘了叫什么了可以实现很多效果

是楼上那个吗?

Pupil 发表于 2018-9-18 13:36:00

jssd 发表于 2018-9-16 20:35
是楼上那个吗?

你查下fastled,github上的,好像还见过几个,一时找不到

18501501628 发表于 2018-9-21 09:01:39

iamfiavarst 发表于 2018-9-26 14:18:18

这个问题好,也想知道需要怎么做。

gmyu 发表于 2018-9-28 10:14:30

WS2812FX 有54种样式,支持分段,速度调节,色彩设置,建议用arduino看看效果先。移植到F030上面,空间爆了。

weatt123456789 发表于 2018-10-12 13:50:12

为啥的我置低刷新要300US才行?

bbandpp 发表于 2018-10-12 13:52:43

gmyu 发表于 2018-9-28 10:14
WS2812FX 有54种样式,支持分段,速度调节,色彩设置,建议用arduino看看效果先。移植到F030上面,空间爆了 ...

WS2812FX ?这是个什么东东?有开源的吗?

bbandpp 发表于 2018-10-12 13:54:02

我见过最NB的是用STM8实现,分段,变色,流星这些效果

weatt123456789 发表于 2018-10-21 15:55:37

用SD卡读,然后直接发,行不行?

weatt123456789 发表于 2018-10-21 15:55:55

效果就用软件做

bbandpp 发表于 2018-11-12 11:22:34

楼主,最后效果做出来了吗

jssd 发表于 2018-11-12 16:39:44

本帖最后由 jssd 于 2018-11-12 16:47 编辑

bbandpp 发表于 2018-11-12 11:22
楼主,最后效果做出来了吗

没有按图的做了。写了个小软件,把所有的数据都做成数组,然后直接用了。这样的后果是code变成了300+K。。。

看下面

生成图片和数组的小软件,使用opencv2413
/***********************************************************************
* OpenCV 2.3.1 example
* By Quarryman 2012
***********************************************************************/
#include <stdio.h>
#include "stdlib.h"
#include <tchar.h>
#include <Windows.h>
#include <fstream>
#include <iostream>
#include <string>
#include<iomanip>
#include <opencv2\opencv.hpp>
#include<shlwapi.h>


using namespace cv;
using namespace std;
//
//
//ofstream outfile("ws2812Dat.c", ios::trunc);
//
//const int LEDNUM = 100;
//
//void get_setImagePixel(string imagePath)
//{
//        /********** 截取名称字符串 *******************/
//        int dex = imagePath.find_last_of('\\');
//        cout << dex << endl;
//        string name = imagePath.substr(dex+1);
//        cout << name << endl;
//        dex = name.find('.');
//        name = name.substr(0,dex);
//        cout << name << endl;
//
////Mat image = imread(imagePath , 0);
//    Mat image = imread(imagePath, 1);
//    //得宽高
//    int w = image.cols;
//    int h = image.rows;
//        int stepw = w/LEDNUM;
//        int i,j;
//    int channels = image.channels();
//      //灰度图,像素为单通道
//      if (channels == 1)
//      {
////            int pixel = image.at<uchar>(x, y);
////            cout << "灰度图像,处的灰度值为" << pixel << endl;
//      }
//      else
//      {
//            //通过实验,彩色图像的默认存储是bgr, 且存储的格式如下
//                        outfile << "const unsigned char " << name <<"[]" << " = {"<<endl;
//
//                        for(j=0;j<h;j+=stepw)
//                        {
//                                outfile << "      ";
//                                for(i=0;i<w;i+=stepw)
//                                {
//                                        int b = image.at<Vec3b>(j, i); // b = image.at<uchar>(x,y*3);
//                                        int g = image.at<Vec3b>(j, i); //g = image.at<uchar>(x, y * 3 + 1);
//                                        int r = image.at<Vec3b>(j, i); //r = image.at<uchar>(x, y * 3 + 1);
//                                        image.at<Vec3b>(j, i) = 255;
//                                        image.at<Vec3b>(j, i) = 255;
//                                        image.at<Vec3b>(j, i) = 255;
//                                        outfile << "{0x" << setw(2)<< setfill('0') << hex << r << ",0x" << setw(2)<<setfill('0') << hex<< g << ",0x" << setw(2)<< setfill('0') << hex<< b << "},";
//                                }
//                                outfile << endl;
//                        }
//                        outfile << "      };"<<endl;
//         }
//
//    imshow("cc", image);
//        outfile.close();
//}
//
//string TCHAR2STRING(TCHAR* str)
//{
//        std::string strstr;
//        try
//        {
//                int iLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
//
//                char* chRtn = new char;
//
//                WideCharToMultiByte(CP_ACP, 0, str, -1, chRtn, iLen, NULL, NULL);
//
//                strstr = chRtn;
//        }
//        catch (std::exception e)
//        {
//        }
//
//        return strstr;
//}
//
//int main()
//{
//////        int x=::MessageBox(NULL, TEXT("将在20秒后关机,确定执行吗?"), TEXT("操作提示"), 1);
////        TCHAR szBuffer = {0};
////        OPENFILENAME file = {0};
////        file.hwndOwner = NULL;
////        file.lStructSize = sizeof(file);
////        file.lpstrFilter = _T("jpg文件(*.jpg)\0*.jpg\0所有文件(*.*)\0*.*\0");//要选择的文件后缀
//////        file.lpstrInitialDir = _T("C:\\");//默认的文件路径
////        file.lpstrFile = szBuffer;//存放文件的缓冲区
////        file.nMaxFile = sizeof(szBuffer) / sizeof(*szBuffer);
////        file.nFilterIndex = 0;
////        file.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER ;//标志如果是多选要加上OFN_ALLOWMULTISELECT
////        BOOL bSel = GetOpenFileName(&file);
//////        cout << file.lpstrFile << endl;
//////        cout << szBuffer << endl;
////        string imagename = TCHAR2STRING(szBuffer);
////        cout << imagename << endl;
////
//////        string imagename = "eeee.jpg";   //此处需要填写绝对地址,我测试时使用相对地址出错。
////        get_setImagePixel(imagename);
//
//        //读入图像
//        //Mat img = imread(imagename);
// //
//        ////如果读入图像失败
//        //if(img.empty())
//        //{
//        //        return -1;
//        //}
// //
//        ////创建窗口
//        //namedWindow("image",1);
// //
//        ////显示图像
//        //imshow("image", img);
//
//        //等待按键,按键盘任意键返回
//        waitKey();
//
//        return 0;
//
//       //错误指出: feihongmeilian
//       //经本人验证,string imagename = "lena.jpg";处是可以使用相对地址,本人使用环境为OpenCV 2.4.3
//       //图片为meinv.jpg置于代码文件所在文件夹的上一级文件夹中,string imagename = "..\\meinv.jpg"图片可正常显示。
//      //需提醒注意的是 双引号“” 中出现的第一个 斜杠 \ 被视作转义字符
//}


//#include <opencv2/opencv.hpp>
//#include<opencv2/imgproc/imgproc.hpp>
//#include<iostream>

//using namespace std;
//using namespace cv;
//

//int main()
//{
//        Mat img;
//        img = imread("pic180x509.bmp");
//        for (int i = 0; i < 3; i++)
//        {
//                Mat bgr(img.rows, img.cols, CV_8UC3, Scalar(0, 0, 0));
//                Mat temp(img.rows, img.cols, CV_8UC1);
//                Mat out[] = { bgr };
//                int from_to[] = { i,i };
//                mixChannels(&img, 1, out, 1, from_to,1);
//                //获得其中一个通道的数据进行分析
//                imshow("1 channel", bgr);
//                waitKey();
//        }
//}
//
//int main()
//{
//    //载入图像
//    IplImage* img=cvLoadImage("pic180x509.bmp",1);
//    //cvCreateImage(size,depth,channels)函数,depth 图像元素的位深度,IPL_DEPTH_8U 表示无符号8位整型
//    IplImage* Bimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);//1为有1个通道
//    IplImage* Gimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
//    IplImage* Rimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
//
//    IplImage* pImg1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);//3为有3个通道
//    IplImage* pImg2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
//    IplImage* pImg3=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
//    //将RGB图像分离
//    //cvSplit( const CvArr* src,CvArr* dst0,CvArr* dst1,CvArr* dst2,CvArr* dst3 )函数
//    //复制src的各个通道到图像dst0,dst1,dst2和dst3中
//    cvSplit(img,Bimg,Gimg,Rimg,0);
//    //目标图像必须与源图像在大小和数据类型上匹配
//    //输入多通道,输出为B,G,R单通道
//
//    //在合成之前需要清零
//    cvSetZero(pImg1);
//    cvSetZero(pImg2);
//    cvSetZero(pImg3);
//    //将三个通道合成
//    //输入参数为B,G,R单通道,最后一个为输出
//    //cvMerge( const CvArr* src0, const CvArr* src1,const CvArr* src2, const CvArr* src3,CvArr* dst );
//    cvMerge(Bimg,0,0,0,pImg3);
//    cvMerge(0,Gimg,0,0,pImg2);
//    cvMerge(0,0,Rimg,0,pImg1);
//      
//    cvNamedWindow("RGB",1);
//    cvShowImage("RGB",img);
//
//    cvNamedWindow("R",1);
//    cvShowImage("R",pImg1);
//
//    cvNamedWindow("G",1);
//    cvShowImage("G",pImg2);
//
//    cvNamedWindow("B",1);
//    cvShowImage("B",pImg3);
//
//    //HSV图像处理
//    IplImage* hsv=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
//
//    //将RGB图像转为HSV图像的函数
//    cvCvtColor(img,hsv,CV_BGR2HSV);
//
//    IplImage* Himg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);
//    IplImage* Simg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);
//    IplImage* Vimg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);
//
//    IplImage* HSV1=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);//3个通道
//    IplImage* HSV2=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);
//    IplImage* HSV3=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);
//    //用法同上
//    cvSplit(hsv,Vimg,Simg,Himg,0);
//
//    cvNamedWindow("V",1);
//    cvShowImage("V",Vimg);
//
//    cvNamedWindow("S",1);
//    cvShowImage("S",Simg);
//
//    cvNamedWindow("H",1);
//    cvShowImage("H",Himg);
//
//    cvNamedWindow("HSV",1);
//    cvShowImage("HSV",hsv);
//
//    cvWaitKey(0);
//    //RGB RELEASE
//    cvReleaseImage(&img);
//    cvReleaseImage(&Rimg);
//    cvReleaseImage(&Gimg);
//    cvReleaseImage(&Bimg);
//
//    cvReleaseImage(&pImg1);
//    cvReleaseImage(&pImg2);
//    cvReleaseImage(&pImg3);
//    //HSV RELEASE
//    cvReleaseImage(&hsv);
//    cvReleaseImage(&Himg);
//    cvReleaseImage(&Simg);
//    cvReleaseImage(&Vimg);
//
//    cvReleaseImage(&HSV1);
//    cvReleaseImage(&HSV2);
//    cvReleaseImage(&HSV3);
//
//    return 0;
//}


struct BGR
{
    uchar b;
    uchar g;
    uchar r;
};

struct HSV
{
    int h;
    double s;
    double v;
};

bool IsEquals(double val1 , double val2)
{
    return fabs(val1 - val2) < 0.001;
}

// BGR(BGR: 0~255)转HSV(H: , V: )
void BGR2HSV(BGR &bgr, HSV &hsv)
{
    double b, g, r;
    double h, s, v;
    double min, max;
    double delta;

    b = bgr.b / 255.0;
    g = bgr.g / 255.0;
    r = bgr.r / 255.0;

    if (r > g)
    {
         max = MAX(r, b);
         min = MIN(g, b);
    }
    else
    {
         max = MAX(g, b);
         min = MIN(r, b);
    }

    v = max;
    delta = max - min;

    if (IsEquals(max, 0))
    {
         s = 0.0;
    }
    else
    {
         s = delta / max;
    }

    if (max == min)
    {
         h = 0.0;
    }
    else
    {
         if (IsEquals(r, max) && g >= b)
         {
            h = 60 * (g - b) / delta + 0;
         }
         else if (IsEquals(r, max) && g < b)
         {
            h = 60 * (g - b) / delta + 360;
         }
         else if (IsEquals(g, max))
         {
            h = 60 * (b - r) / delta + 120;
         }
         else if (IsEquals(b, max))
         {
            h = 60 * (r - g) / delta + 240;
         }
    }

    hsv.h = (int)(h + 0.5);
    hsv.h = (hsv.h > 359) ? (hsv.h - 360) : hsv.h;
    hsv.h = (hsv.h < 0) ? (hsv. h + 360) : hsv.h;
    hsv.s = s;
    hsv.v = v;
}

// HSV转BGR
void HSV2BGR(HSV &hsv, BGR &bgr)
{
    int h = hsv.h;
    double s = hsv. s;
    double v = hsv. v;
    double b = 0.0;
    double g = 0.0;
    double r = 0.0;

    int flag = (int)abs(h / 60.0);
    double f = h/60.0 - flag;
    double p = v * (1 - s);
    double q = v * (1 - f*s);
    double t = v * (1 - (1- f)*s);

    switch (flag)
    {
    case 0:
         b = p;
         g = t;
         r = v;
         break;
    case 1:
         b = p;
         g = v;
         r = q;
         break;
    case 2:
         b = t;
         g = v;
         r = p;
         break;
    case 3:
         b = v;
         g = q;
         r = p;
         break;
    case 4:
         b = v;
         g = p;
         r = t;
         break;
    case 5:
         b = q;
         g = p;
         r = v;
         break;
    default:
         break;
    }

    int blue = int(b * 255);
    bgr.b = (blue > 255) ? 255 : blue;
    bgr.b = (blue < 0) ? 0 : bgr.b;

    int green = int(g * 255);
    bgr.g = (green > 255) ? 255 : green;
    bgr.g = (green < 0) ? 0 : bgr.g;

    int red = int(r * 255);
    bgr.r = (red > 255) ? 255 : red;
    bgr.r = (red < 0) ? 0 : bgr.r;
}

ofstream outfile("data.c", ios::trunc);

int main()
{
    string imgName = "pic360x201.bmp";
    Mat img = cv::imread(imgName);
    Mat tmp = img.clone();

    if (img.data == NULL)
    {
         cout<< "Could not open or find the image"<<endl;
         return -1;
    }
        outfile << "const unsigned char " << "monoBW" <<"[]" << " = {" << " /*256*1*/" <<endl;
        for(int i=0;i<256;i++)
        {
                outfile << "{0x" << setw(2)<< setfill('0') << hex << i << ",0x" << setw(2)<<setfill('0') << hex<< i << ",0x" << setw(2)<< setfill('0') << hex<< i << "},";
        }
        outfile << " };"<<endl;
        outfile <<endl;
    // 色彩空间转换>>自己实现
    int row = img.rows;
    int col = img.cols * img.channels();
    uchar * pImg = NULL;
    BGR bgr;
    HSV hsv;

        outfile << "const unsigned char " << "hsv" <<"[]" << " = {" << " /*360*201*/" <<endl;
        outfile << "      ";
    for (int j = 0; j < col/3; j++)
        {
                outfile << "/*   " << setw(3)<< setfill('0') << j << "   */" ;
        }
        outfile << endl;

       for (int i = 0; i < row/2+1; i++)
    {
                outfile << "/* " << setw(3)<< setfill('0')<< dec << i << "*/ " ;
      pImg = img.ptr<uchar>(i);// 遍历时用img.at()效率会降很多, 很耗时
      for (int j = 0; j < col; j+=3)
      {
            //bgr.b = pImg;
            //bgr.g = pImg;
            //bgr.r = pImg;
            //bgr.b = 0;
            //bgr.g = 0;
            //bgr.r = 0;
            //BGR2HSV(bgr, hsv);
            hsv.h = j/3;//调整色相 +60.取值范围为[0, 360)
            hsv.h = (hsv.h > 359) ? (hsv.h - 360) : hsv.h;
            hsv.h = (hsv.h < 0)   ? (hsv.h + 360) : hsv.h;

                        hsv.s = 1;

                        hsv.v = i/100.0;//调整色相 +60.取值范围为[0, 360)
            hsv.v = (hsv.v > 1) ? 1 : hsv.v;
            hsv.v = (hsv.v < 0) ? 0 : hsv.v;
            HSV2BGR( hsv, bgr);
            pImg = bgr.b;
            pImg = bgr.g;
            pImg = bgr.r;
                        int b = bgr.b;
                        int g = bgr.g;
                        int r = bgr.r;
                        outfile << "{0x" << setw(2)<< setfill('0') << hex << r << ",0x" << setw(2)<<setfill('0') << hex<< g << ",0x" << setw(2)<< setfill('0') << hex<< b << "},";
      }
                outfile << endl;
    }

        for (int i = row/2+1; i < row; i++)
    {
                outfile << "/* " << setw(3)<< setfill('0')<< dec << i << "*/ " ;
      pImg = img.ptr<uchar>(i);// 遍历时用img.at()效率会降很多, 很耗时
      for (int j = 0; j < col; j+=3)
      {
            //bgr.b = pImg;
            //bgr.g = pImg;
            //bgr.r = pImg;
            //bgr.b = 255;
            //bgr.g = 255;
            //bgr.r = 255;
            //BGR2HSV(bgr, hsv);
            hsv.h = j/3;//调整色相 +60.取值范围为[0, 360)
            hsv.h = (hsv.h > 359) ? (hsv.h - 360) : hsv.h;
            hsv.h = (hsv.h < 0)   ? (hsv.h + 360) : hsv.h;
                        hsv.s = 1-(i-100)/100.0;//调整色相 +60.取值范围为[0, 360)
            hsv.s = (hsv.s > 1) ? 1 : hsv.s;
            hsv.s = (hsv.s < 0) ? 0 : hsv.s;
                        hsv.v = 1;
            HSV2BGR( hsv, bgr);
            pImg = bgr.b;
            pImg = bgr.g;
            pImg = bgr.r;
                        int b = bgr.b;
                        int g = bgr.g;
                        int r = bgr.r;
                        outfile << "{0x" << setw(2)<< setfill('0') << hex << r << ",0x" << setw(2)<<setfill('0') << hex<< g << ",0x" << setw(2)<< setfill('0') << hex<< b << "},";
      }
                outfile << endl;
    }

        outfile << "      };"<<endl;

   // for (int i = 0; i < row; i++)
   // {
   //   pImg = img.ptr<uchar>(i);// 遍历时用img.at()效率会降很多, 很耗时
   //   for (int j = 0; j < col; j+=3)
   //   {
   //         bgr.b = pImg;
   //         bgr.g = pImg;
   //         bgr.r = pImg;
   //         BGR2HSV(bgr, hsv);
   //         //hsv.h = hsv.h + 60;//调整色相 +60.取值范围为[0, 360)
   //         //hsv.h = (hsv.h > 359) ? (hsv.h - 360) : hsv.h;
   //         //hsv.h = (hsv.h < 0)   ? (hsv.h + 360) : hsv.h;
                        //hsv.s =hsv.s + 0.1;//调整色相 +60.取值范围为[0, 360)
   //         hsv.s = (hsv.s > 1) ? 1 : hsv.s;
   //         hsv.s = (hsv.s < 0)   ? 0 : hsv.s;
   //         HSV2BGR( hsv, bgr);
   //         pImg = bgr.b;
   //         pImg = bgr.g;
   //         pImg = bgr.r;
   //   }
   // }
    imshow("my", img);
        cv::imwrite("output.bmp",img);

    // 色彩空间转换>>调用OpenCV
//    cvtColor(tmp, tmp, CV_BGR2HSV);
//    vector<Mat> channels;
//    split(tmp, channels);
////    channels += 60;// 调整色相 +30.这里没有做范围判断,opencv的h取值范围为[0, 180)
//        channels += 200;// 调整色相 +30.这里没有做范围判断,opencv的h取值范围为[0, 180)
//    merge(channels, tmp);
//    cvtColor(tmp, tmp, CV_HSV2BGR);
//    imshow("opencv", tmp);
    cv::waitKey();
   
    return 0;
}


生成的数组


生成的图片


zhcj66 发表于 2022-10-9 16:30:49

bbandpp 发表于 2018-10-12 13:54
我见过最NB的是用STM8实现,分段,变色,流星这些效果
(引用自28楼)

有出处吗或者效果
页: [1]
查看完整版本: 求助:求WS2812彩灯灯光效果算法或者软件