【发布时间】:2014-09-02 23:38:24
【问题描述】:
好的..根据标题,我试图找出一种方法-返回在字符串中占主导地位的字符的函数。我也许能弄清楚..但我的逻辑似乎有问题,我在这方面失败了。如果有人能毫无问题地提出这个问题,我将非常高兴,谢谢。
我说“在一个字符串中”是为了使其更加简化。我实际上是从包含 BMP 图像的缓冲数据中做到这一点的。正在尝试输出基色(主要像素)。
我现在拥有的是我开始的未完成的功能:
RGB
bitfox_get_primecolor_direct
(char *FILE_NAME)
{
dword size = bmp_dgets(FILE_NAME, byte);
FILE* fp = fopen(convert(FILE_NAME), "r");
BYTE *PIX_ARRAY = malloc(size-54+1), *PIX_CUR = calloc(sizeof(RGB), sizeof(BYTE));
dword readed, i, l;
RGB color, prime_color;
fseek(fp, 54, SEEK_SET); readed = fread(PIX_ARRAY, 1, size-54, fp);
for(i = 54; i<size-54; i+=3)
{
color = bitfox_pixel_init(PIXEL_ARRAY[i], PIXEL_ARRAY[i+1], PIXEL_ARRAY[i+2);
memmove(PIX_CUR, color, sizeof(RGB));
for(l = 54; l<size-54; l+=3)
{
if (PIX_CUR[2] == PIXEL_ARRAY[l] && PIX_CUR[1] == PIXEL_ARRAY[l+1] &&
PIX_CUR[0] == PIXEL_ARRAY[l+2])
{
}
请注意,RGB 是一个包含 3 个字节(R、G 和 B)的结构。
我知道那没什么,但..这就是我现在所拥有的。
有什么办法可以完成吗?
【问题讨论】:
-
占主导地位,你是指图像中出现频率最高的颜色吗?
-
我会将您的 rgb 值转换为单个 32 位值,只要您保持一致,字节顺序就无关紧要,这使它们更易于比较。然后我只计算我看到每个值的次数并返回计数最多的那个。
-
@thurizas 是的。这就是我的意思。
-
@Retired Ninja 我使用的颜色配置文件不支持 32 位 bmp。它是 BMPx24 .. 怎么把我的 rgb 值转换成一个 32 位的值,这是不可能的。
-
因此,使用 32 位中的 24 位,其余为 0。