Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359

Осветлить рисунок

24.06.2012, 10:17. Показов 2161. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро.
Хотелось бы осветлить рисунок в билдере. Обычный Image на форме.
Можно ли это сделать?
Осветлить - имеется ввиду сделать все пиксели более светлыми, или только конкретные.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2012, 10:17
Ответы с готовыми решениями:

Рисунок
Добрый день. помогите пожалуйста сделать отрисовку на подобии этой Image1->Canvas->Pen->Width=2; ...

Как осветлить изображение?
Хочу написать программу что бы можно было осветлять фотографии(JPG, PNG, BMP), и на сколько сложно реализовать такую программу , и не...

Осветлить верхнюю половину картинки
// АКлаба1.cpp: определяет точку входа для консольного приложения. // #include <iostream> #include <Windows.h> #include...

6
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
24.06.2012, 10:32
Ну самый простой способ, может не очень верный, добавлять каждому цвету по 1, пока не достигнет 255

Добавлено через 28 секунд
смотря для чего надо
0
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
24.06.2012, 11:23  [ТС]
ну тоже вариант. Или вот я знаю цвет какой нужно осветлить например.
Остальные мне ни к чему. Вопрос в следующем, как сделать перебор этих самых пикселей. Без них, видимо осветить не получится((

Добавлено через 47 минут
Ладно, сам отвечу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Перебере м пиксели
TColor Col;
TColor OldCol=(TColor)RGB(128,128,128);  //установим цвет
TColor NewCol = (TColor)RGB(255,255,255); //установим цвет
 
short red,green,blue;
for (short i = 0; i < 100; i++)
{
   for (short j = 0; j < 100; j++)
  {
     Col = Form1->Image2->Canvas->Pixels[i][j];
//   //Получим цвет
// red   = GetRValue(Col); // красная составляющая
// green = GetGValue(Col); // зеленая составляющая
// blue  = GetBValue(Col); // синяя составляющая
 
if (Col==OldCol)
    {
        //установим новый цвет
       Form1->Image2->Canvas->Pixels[i][j] =NewCol;
     }
  }
}
т.е. осветвляю конкретный цвет.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.06.2012, 11:27
Цитата Сообщение от Андрей2011 Посмотреть сообщение
т.е. осветвляю конкретный цвет.
Скорее уж просто белым подменяешь. Осветление - это несколько иное.
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
24.06.2012, 11:59
Цитата Сообщение от Андрей2011 Посмотреть сообщение
ну тоже вариант. Или вот я знаю цвет какой нужно осветлить например.
Остальные мне ни к чему. Вопрос в следующем, как сделать перебор этих самых пикселей. Без них, видимо осветить не получится((

Добавлено через 47 минут
Ладно, сам отвечу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Перебере м пиксели
TColor Col;
TColor OldCol=(TColor)RGB(128,128,128);  //установим цвет
TColor NewCol = (TColor)RGB(255,255,255); //установим цвет
 
short red,green,blue;
for (short i = 0; i < 100; i++)
{
   for (short j = 0; j < 100; j++)
  {
     Col = Form1->Image2->Canvas->Pixels[i][j];
//   //Получим цвет
// red   = GetRValue(Col); // красная составляющая
// green = GetGValue(Col); // зеленая составляющая
// blue  = GetBValue(Col); // синяя составляющая
 
if (Col==OldCol)
    {
        //установим новый цвет
       Form1->Image2->Canvas->Pixels[i][j] =NewCol;
     }
  }
}
т.е. осветвляю конкретный цвет.
Вот вам пример для работы с RGB
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int Height = Image1->Picture->Bitmap->Height;
    int Width = Image1->Picture->Bitmap->Width;
    byte r, g, b;
    int color;
    Image1->Picture->Bitmap->PixelFormat = pf24bit;
    for (int x = 0; x < Width; x++) {
        for (int y = 0; y < Height; y++) {
            color = ColorToRGB(Image1->Picture->Bitmap->Canvas->Pixels[x][y]);
            r = GetRValue(color);
            g = GetGValue(color);
            b = GetBValue(color);
            Image1->Picture->Bitmap->Canvas->Pixels[x][y] = RGB(r, g, b);
        }
    }
    Image1->Repaint();
Скорее всего, нужно сначала изменить цветовую модель. Через изменение цветов RGB вы сможете затемнить картинку, умножив каждый цвет на число от 0 до 1, но увеличить яркость не получится.
1
23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211
03.07.2012, 14:12
Что бы осветли надо действительно изменить цветовую схему. Наиболее для этого подойдет HLS. Алгоритм ее непомню но где то с 2010 версии есть процедуры в юните GraphUtil. Там есть процедуры изменения цвета и преобразования в выше указанную цветовую модель, и даже готовые процедуры получения более светлого цвета или более темного.
Pascal
1
2
3
4
5
6
7
8
{ GetHighLightColor and GetShadowColor take a Color and calculate an
  "appropriate" highlight/shadow color for that value.  If the color's
  saturation is beyond 220 then it's lumination is decreased rather than
  increased.  Since these routines may be called repeatedly for (potentially)
  the same color value they cache the results of the previous call. }
 
function GetHighLightColor(const Color: TColor; Luminance: Integer = 19): TColor;
function GetShadowColor(const Color: TColor; Luminance: Integer = -50): TColor; //доплнительное вдруг пригодится
Ну вот собственно и все.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
03.07.2012, 16:36
Как вариант с моделью YCbCr
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int x=Image1->Picture->Width;
        int y=Image1->Picture->Height;
        TColor point;
        int R, G, B, Y, U, V;
        for (int j=0;j<y;j++)
        {
                for (int i=0;i<x;i++)
                {
                        point=Image1->Canvas->Pixels[i][j];
                        R=GetRValue(point);
                        G=GetGValue(point);
                        B=GetBValue(point);
                        Y=0.299*R + 0.587*G + 0.114*B;
                        U=(-0.14713)*R - 0.28886*G + 0.436*B;
                        V=0.615*R - 0.51499*G - 0.10001*B;
                        Y+=50;
                        R=Y + 1.13983*V;
                        if (R>0xFF) R=0xFF;
                        G=Y - 0.39465*U - 0.58060*V;
                        if (G>0xFF) G=0xFF;
                        B=Y + 2.03211*U;
                        if (B>0xFF) B=0xFF;
                        point = RGB(R,G,B);
                        Image1->Canvas->Pixels[i][j]=point;
//                        Application->ProcessMessages();
                }
        }
        ShowMessage("Done!");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2012, 16:36
Помогаю со студенческими работами здесь

Растровый рисунок, как вставить bmp-рисунок в окно на полный экран?
Всем здрасьте! По книге которой я учусь , не понятно описано как вставить какую-нибудь картиночку в окно. Помогите мне , напишите как...

Графический Рисунок(нужно составить рисунок на С++ в форме желтой звезды)
нужно составить рисунок на С++ в форме желтой звезды

Как создать рисунок и сохранить его в bmp (точечный рисунок)
Здравствуйте, пишу свой графический редактор и вот не знаю как из того что я рисую в графе сконструировать рисунок , а потом сохранить его...

Установите в документе рисунок с кнопкой При нажатии кнопки рисунок должен смениться
Ув. пользователи! Прошу помочь мне с некоторыми задачами по Java Script: 1) Установите в документе рисунок с кнопкой. При нажатии...

На странице есть рисунок. При наведении мыши на этот рисунок он должен измениться
На странице есть рисунок. При наведении мыши на этот рисунок он должен измениться. Когда Вы отведете мышку в сторону, рисунок должен...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru