一道字符串算法优化,求助
请教一下大家(32位字长的pc机环境):
#define WIDTH 320
#define HEIGHT 240
#define BYTES 3
对一个char s[WIDTH*HEIGHT*BYTES]的线性数据空间,
BYTES为最小处理单位,320*240为VIDEO的宽度和高度,也是LCD像素点个数。因为从摄像头获取到的是24位的RGB色彩,所以每3字节表示一个像素的色彩,深度为24位,现要把它转换为16位,2 字节的rgb格式(5:6:5)。
/* 包含在.h文件中的片段 */
typedef struct st_video_color_pixel_24{
unsigned char blue;
unsigned char green;
unsigned char red;
} COLOR24_T;
#define color_24to16(color) ((short)(((color.blue>>3))|((color.green>>2)<<5)|((color.red>>3)<<11)))
/* 包含在.c文件中的片段 */
unsigned short pbuf[WIDTH*HEIGHT];
COLOR24_T color;
...
for(row=0; row<HEIGHT; row++){
for(col=0; col<WIDTH; col++){
strncpy((char *)&color, (const char *)(pvideo_buf+row*WIDTH*BYTES+col*BYTES), sizeof(COLOR24_T));
pbuf[row*WIDTH+col] = (unsigned short)color_24to16(color);
}
}
按这种常规处理方案,需要处理WIDTH*HEIGHT次,对每一个BYTES字节的24位RGB色彩,转换为2字节16位的565格式的数据,这段代码效率很低,还有3字节的RGB色彩跨4字节边界问题。大家有没有好的算法,优化一下这个数据处理过程。谢了!
#define WIDTH 320
#define HEIGHT 240
#define BYTES 3
对一个char s[WIDTH*HEIGHT*BYTES]的线性数据空间,
BYTES为最小处理单位,320*240为VIDEO的宽度和高度,也是LCD像素点个数。因为从摄像头获取到的是24位的RGB色彩,所以每3字节表示一个像素的色彩,深度为24位,现要把它转换为16位,2 字节的rgb格式(5:6:5)。
/* 包含在.h文件中的片段 */
typedef struct st_video_color_pixel_24{
unsigned char blue;
unsigned char green;
unsigned char red;
} COLOR24_T;
#define color_24to16(color) ((short)(((color.blue>>3))|((color.green>>2)<<5)|((color.red>>3)<<11)))
/* 包含在.c文件中的片段 */
unsigned short pbuf[WIDTH*HEIGHT];
COLOR24_T color;
...
for(row=0; row<HEIGHT; row++){
for(col=0; col<WIDTH; col++){
strncpy((char *)&color, (const char *)(pvideo_buf+row*WIDTH*BYTES+col*BYTES), sizeof(COLOR24_T));
pbuf[row*WIDTH+col] = (unsigned short)color_24to16(color);
}
}
按这种常规处理方案,需要处理WIDTH*HEIGHT次,对每一个BYTES字节的24位RGB色彩,转换为2字节16位的565格式的数据,这段代码效率很低,还有3字节的RGB色彩跨4字节边界问题。大家有没有好的算法,优化一下这个数据处理过程。谢了!
...全文
相关推荐
微软的一道算法优化题
根据给定的信息,本文将对一道来自微软的算法优化题目进行深入分析,主要涉及如何高效地计算出在从1到N的所有整数中数字“1”出现的总次数。
算法之字符串排序:高位优先算法深度剖析与优化策略
在算法学习的道路上,每一个新的算法都是提升编程能力的宝贵财富。我希望能和大家一同探索,共同进步。今天,我们深入探讨字符串排序中的高位优先(MSD)算法,这一算法在处理字符串数据时展现出独特的优势,理解它对于解决实际编程问题至关重要。
字符串常见的算法题经典
一、字符串反转算法反转字符串是字符串处理中非常重要的一种操作。我们可以使用折半法来实现字符串反转,具体来说,就是将前后对应位置的字符互换。但是,这种方法没有考虑速度和空间的优化。
面试UC浏览器的一道处理字符串的题目(已提供答案)
通常,这样的面试题可能会包含字符串的查找、替换、分割、拼接等操作,或者是对字符串进行特定的算法处理,如正则表达式匹配、字符串排序等。
LZ78算法实现对任意字符串的压缩与解压
- 编码方式:编码可以是数字序列、二进制序列或其他自定义格式,关键是要确保能准确地还原原始字符串。- 位操作优化:在处理二进制字符串时,合理使用位操作可以提高代码执行速度。


