Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
1

Как заменить цвет в битмапе

29.11.2019, 08:56. Показов 1755. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здравствуйте.

В Image1 загружена картинка bmp. В ней присутствует, например, чёрный цвет. Можно ли программно его заменить на зелёный?
Pascal
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
var
    Form1: TForm1;
    bmp: Graphics.TBitmap;
 
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
    bmp:= Graphics.TBitmap.Create;
    bmp.Assign(Image1.Picture);
    // здесь нужно заменить один цвет другим  неважно какой каким
end;
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
    FreeAndNil(bmp);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var srcRect, destRect: TRect;
begin
 
    srcRect:= Rect(0, 0*31, 31, 0*31 + 31);               // Откуда берём
    destRect:= Rect(20, 30, 20 + 31, 30 + 31);            // Куда помещаем
    Form1.Canvas.CopyRect(destRect, bmp.Canvas, srcRect); // Выводим 
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2019, 08:56
Ответы с готовыми решениями:

Как нарисовать эллипс на битмапе?
Как нарисовать елипс на битмапе? У меня рисует только при нажатии на кнопку и то под битмапом........

Как определить есть ли изображение в битмапе?
Собственно как поставить условие, что бы проверить если ли изображение в битмапе?

Как удалить\заменить цвет
Здравствуйте! Подскажите пожалуйста, как сделать фон белым?

Как отображать буквы из TTF шрифта в битмапе со сглаживанием (или без)
У меня задача - нужно отображать буквы из TTF-шрифта на экране без использования каких-либо средств...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32970 / 21283 / 8173
Регистрация: 22.10.2011
Сообщений: 36,556
Записей в блоге: 8
29.11.2019, 09:41 2
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Здесь есть пример попиксельной обработки изображения.
1
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
29.11.2019, 10:42  [ТС] 3
volvo, Вы имеете в виду пример Fading example?

Добавлено через 2 минуты
пробежаться в цикле по пикселам и заменить один цвет на другой?

Добавлено через 2 минуты
Я думал в Lazarus есть специальная функция
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32970 / 21283 / 8173
Регистрация: 22.10.2011
Сообщений: 36,556
Записей в блоге: 8
29.11.2019, 10:48 4
А что, в Билдере была такая функция?
1
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
29.11.2019, 15:41  [ТС] 5
volvo, нет

Добавлено через 4 часа 48 минут
volvo, почему заменяемый мной цвет всегда прозрачный?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var i,j: integer;
    bmp: Graphics.TBitmap;
    clrOriginal, clrReplace: Graphics.TColor;
begin
    bmp:= Graphics.TBitmap.Create;
    bmp.Assign(Image1.Picture);
    clrOriginal:= bmp.Canvas.Pixels[0,0];
    clrReplace:= clGreen;
    for i:= 0 to bmp.Width do begin
        for j:= 0 to bmp.Height do begin
            if bmp.Canvas.Pixels[i,j]=clrOriginal then bmp.Canvas.Pixels[i,j]:= clrReplace;
        end;
    end;
    Image1.Picture.Assign(bmp);
end;
Цвет был серым. Должен стать зелёным, а стал прозрачным.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32970 / 21283 / 8173
Регистрация: 22.10.2011
Сообщений: 36,556
Записей в блоге: 8
29.11.2019, 15:56 6
Хм... У меня зеленым становится:
Изображения
 
1
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
29.11.2019, 16:02  [ТС] 7
вот проект (Windows)
Вложения
Тип файла: rar Ver1.0.rar (126.3 Кб, 3 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32970 / 21283 / 8173
Регистрация: 22.10.2011
Сообщений: 36,556
Записей в блоге: 8
29.11.2019, 16:32 8
Вот так лучше?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
implementation
uses IntfGraphics, FPimage; // добавляем
{$R *.lfm}
 
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
  i, j : integer;
  lii : TLazIntfImage;
  clrOriginal, clrReplace : TFPColor;
begin
  lii := TLazIntfImage.Create(0, 0);
  lii.LoadFromBitmap(Image1.Picture.Bitmap.Handle, Image1.Picture.Bitmap.MaskHandle);
  clrOriginal := lii.Colors[0, 0];
  clrReplace := TColorToFPColor(clGreen);
  for i := 0 to lii.Height - 1 do
    for j := 0 to lii.Width - 1 do
      if lii.Colors[j, i] = clrOriginal then lii.Colors[j, i] := clrReplace;
  Image1.Picture.Bitmap.LoadFromIntfImage(lii);
  lii.Free;
end;
Как заменить цвет в битмапе


Я же специально дал ссылку на работу с более быстрым TLazIntfImage, зачем было опять замедлять?
1
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
29.11.2019, 17:21 9
Строго один clBlack? Или какой-то диапазон?

Добавлено через 13 секунд
А что если просто нарисовать с маской по цвету?
1
29.11.2019, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2019, 17:21
Помогаю со студенческими работами здесь

Как заменить цвет выделения в QWebPage.HighlightAllOccurrences?
Всем привет Нужен совет пользователей Python + pyQt4 Собственно проблема: нужно заменить цвет...

Как в загруженной картинке в TImage найти по цвету и заменить на другой цвет определенные пиксели?
Суть в следующем: пишу программу, которая, подобно функции "Поиск/замена" в Блокноте, будет искать...

Построение дерева на битмапе
Страхова компанія Бухгалтерія-------------Страхова компанія...

Java заменить цвет
можно-ли в java, в изображении, заменить все пиксели одного цвета на пиксели другого цвета?...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru