Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Фиалка001

Рисование гистограммы яркостей

22.12.2012, 16:59. Показов 1192. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Необходимо в диалоговом окне нарисовать гистограмму яркостей изображений.
1) Гистограмму вычисляю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    BYTE *histogram = new BYTE[256];
    for (int i = 0; i < 256; i++)
    {
        histogram[i] = 0;
    }
            
    //по строкам
    for (DWORD dwLineIndex = 0; dwLineIndex < dwHeight; dwLineIndex++) 
    {       
        //считали строку
        ReadDataStream(Image.hAttachImage, pSrcLine, dwLineIndex, FORMAT_8);        
 
        //по столбцам строки
        for (DWORD dwPixelIndex = 0; dwPixelIndex < dwWidth; dwPixelIndex++)
        {
            histogram[pSrcLine[dwPixelIndex]]++;
        }
    }
2) Вывожу ее так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void Hg::OnPaint()
{
    CPaintDC dc(this);
    
    // Найдем среднее значение
    DWORD MaxBright = 0, SumBright = 0;
    for (int i = 0; i < 256; i++)
        SumBright += _pHist[i];
    
    // Пусть максимальное (показываемое на рисунке) значение
    // будет в 4 раза больше среднего
    MaxBright = 4 * SumBright / 256;
    if (MaxBright == 0) 
        return;
    
    // Перо для рисования гистограммы
    CPen HistPen(PS_SOLID, 2, RGB(0, 0, 0));
    CPen *pOldPen = dc.SelectObject(&HistPen);
    CGdiObject *pOldBrush = dc.SelectStockObject(NULL_BRUSH);
    
    // Найдем координаты окна вывода
    CRect FrameRect;
    GetWindowRect(&FrameRect);
    FrameRect.bottom -= 51;
    ScreenToClient(&FrameRect);
    
    // Нарисуем гистограмму в окне
    dc.Rectangle(&FrameRect);
    double kx = ((double)FrameRect.Width()) / 256;
    double ky = ((double)FrameRect.Height()) / MaxBright;
    
    int x = 0, y = 0;
    for (byte i = 0; i < 256; i++)
    {
        x = FrameRect.left + (kx * i);
        y = FrameRect.bottom;
        dc.MoveTo(x, y);
        y = FrameRect.bottom - (ky * _pHist[i]);
        if (y < FrameRect.top) 
            y = FrameRect.top;
        dc.LineTo(x, y);
    }
    if (pOldPen) 
        dc.SelectObject(pOldPen);
    if (pOldBrush)
        dc.SelectObject(pOldBrush);
 
}
В результате получается неверная гистограмма (вместо плавной "горки" - отрывистые линии), а также диалоговое окно невозможно закрыть, потому что исчезают кнопки ОК и Отмена, программа зависает. Пожалуйста, подскажите, что я делаю не так? В Visual C++ я новичок, поэтому не судите строго)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2012, 16:59
Ответы с готовыми решениями:

Создание .bmp из массива яркостей
Здравствуйте. Имеется двумерный массив яркостей (чисел от 0 до 255), требуется создать файл bmp (или какой-либо другой файл изображения)....

Трехмерная гистограмма яркостей цветного изображения
Люди добрые, помогите на C++ разработать программу рассчитывающую трехмерную гистограмму яркостей цветного изображения? Самому разобраться...

Рисование гистограммы
Здравствуйте, уважаемые форумчане. Как в OpenGl 3d гистограмму построить (ссылка на картинку внизу)??Помогите, пожалуйста, советом или...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2012, 16:59
Помогаю со студенческими работами здесь

Рисование гистограммы в VB
Считывает показания с трех датчиков из файла: Private Sub Command1_Click() Picture1.Cls Picture2.Cls Picture3.Cls ...

Рисование гистограммы
Доброго времени суток уважаемые эксперты. Пишу программу, в которой, по ходу дела, должны строиться гистограммы. И вот натолкнулся на один...

OpenCV, рисование гистограммы изображение используя потоки
Необходимо создать приложение, вычисляющее гистограмму изображения с указанной спецификацией:Приложение работает последовательно или...

Как реализовать гистограмму яркостей в Open CV?
Как реализовать гистограмму яркостей в Open Cv. Использую cv::Mat mat = cv::imread(&quot;image.jpg&quot;, CV_LOAD_IMAGE_GRAYSCALE); ...

Занести значения всех яркостей пикселов в отдельный массив
public Bitmap MediannFilter(Bitmap bmpTemp) { Bitmap bmp4; bmp4 = bmpTemp; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru