Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2015, 20:33   #1
Анастасия1996
 
Регистрация: 03.08.2014
Сообщений: 4
По умолчанию Гистограмма без Chart

Здравствуйте, мне нужно построить гистограмму по RGB картинки, точнее три гистограммы (R, G и B) на одном Image. Использовать компонент Chart нельзя. Я построила алгоритм, а как воплотить его не знаю:
Выбрать количество столбиков (варьируется TrackBar)->n = TrackBar1->Position;
Далее загрузить картинку raw формата c помощью структуры
Код:
struct r_g_b
{
        float r, g, b;
};
r_g_b clr;
Создать три массива R[1000], G[1000], B[1000]
Далее нужно найти размер каждого из интервалов, он у всех одинаковый

float I = 1 / n
Теперь нужно проверить попадает ли точка clr.r (или clr.g...) в какой-то из интервалов и вернуть номер интервала, и этот номер записать индексом массива R, увеличив значение массива по этому индексу на единицу. То есть, например с 0 до 4 два интервала, точка 1,25 попадает в 0, значит наращиваться на единицу будет значение R[0]. Этот пункт и следующий я не знаю, как реализовать
Код:
float TForm1::fR(float RED, float I)
{
 
        for (interR = 0; interR < N; interR++)
        {
                if (clr.r >= 0 && clr.r < 1)
                {
                        float x = 0;
                        float inter = I;
                        if (RED >= x && RED < inter)
                        {
                                return interR;
 
                        }
                        else
                        {
                                inter += inter;
                                x = inter;
                        }
          
                }
        }
}
RED-->это clr.r
I-->interval(interval = 1/n)
N = 1000
тут что-то не так, я пока для одного канала сделала для примера, он все не правильно делает, не наращивает, а сразу возвращает interR
Еще нужно отрисовать все три массива с помощью FillRect...
Заранее спасибо!!!
Анастасия1996 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос тонкий! Как без использования ПОЛЬЗОВАТЕЛЯ инициировать процесс изменения осей в Chart-е? korn999 C++ Builder 0 15.07.2014 20:18
Chart печатается без штрихов Dimansv Общие вопросы Delphi 1 31.10.2012 16:25
Гистограмма Foxx Microsoft Office Excel 4 16.02.2012 21:43
Гистограмма Ilya_L Помощь студентам 6 25.09.2011 14:01
C++ Гистограмма xxxPascalxxx Помощь студентам 1 05.11.2009 15:05