Хорошо. Согласно заголовку Я пытаюсь выяснить способ - функция, которая возвращает символ, который доминирует в строке. Я мог бы понять это ... но, похоже, что-то не так с моей логикой, и я потерпел неудачу в этом. Если кто-то может придумать это без проблем, я буду очень рад вам.Получить символ доминанта из строки
Я говорю «в строке», чтобы сделать его более упрощенным. Я на самом деле делаю это из буферизованных данных, содержащих 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). Я знаю, что ничего, кроме .. Это все, что у меня есть сейчас. Есть ли способ закончить это?
доминирующим, вы имеете в виду цвет, который встречается чаще всего на изображении? – thurizas
Я бы преобразовал ваши значения rgb в одно 32-битное значение, порядок байтов не будет иметь значения, если вы согласны, что упрощает их сравнение. Тогда я просто подсчитаю, сколько раз я видел каждое значение и возвращаю тот, у которого наибольшее количество. –
@thurizas да. Это то, что я имею в виду. – Edenia