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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 22:07   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию Преобразовать цветную картинку в чёрно белую

Получаю цветную картинку в image, а как её преобразовать в чёрно белую, пробывал так
Код:
procedure TForm18.Button1Click(Sender: TObject);
var
 x, y : integer;
 r, g, b : byte;
 c : dword;
begin
  Image1.Picture.LoadFromFile('d:\1.png');
  for y := 0 to Image1.Height-1 do
  begin
    for x := 0 to Image1.Width-1 do
    begin
      c := Image1.Canvas.Pixels[x,y];
      r := GetRValue(c);
      g := GetGValue(c);
      b := GetBValue(c);

      if (r + g + b) div 3 > 128 then
      begin
        Image1.Canvas.Pixels[x,y] := clWhite;
      end
      else
      begin
        Image1.Canvas.Pixels[x,y] := clBlack;
      end;
    end;
  end;
end;
но не тот результат, просто вырезается цвет

Последний раз редактировалось bulldog5293; 27.02.2011 в 22:14.
bulldog5293 вне форума Ответить с цитированием
Старый 27.02.2011, 22:20   #2
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

Если ты имеешь ввиду не чёрно-белое изображение, а в отенках серого, то нужно не сравнивать, а округлять цвет.

То есть:

Color:=Round((R+G+B)/3);
Format C: вне форума Ответить с цитированием
Старый 27.02.2011, 22:34   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

А можно подробней, а то первый раз с таким столкнулся
bulldog5293 вне форума Ответить с цитированием
Старый 27.02.2011, 22:39   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Преобразование RGB в черно-белый рисунок:

Код:
function RgbToGray(RGBColor : TColor) : TColor;
var Gray : byte;
begin
Gray:=Round((0.30*GetRValue(RGBColor))+
(0.59*GetGValue(RGBColor))+(0.11*GetBValue(RGBColor)));
Result:=RGB(Gray, Gray, Gray);
end;

procedure TForm1.Go1Click(Sender: TObject);
var i,j: integer;
    c,d: TColor;
begin
Label1.Visible:=True; //текст метки - "Подождите, пожалуйста..."
Application.ProcessMessages;
for i:=Image1.Left to Image1.Left+Image1.Width do
for j:=Image1.Top to +Image1.Top+Image1.Height do
begin
c:=Image1.Picture.Bitmap.Canvas.Pixels[i-Image1.Left,j-Image1.Top];
d:=RgbToGray(c);
Image1.Picture.Bitmap.Canvas.Pixels[i-Image1.Left,j-Image1.Top]:=d;
end;
Label1.Visible:=False;
Application.ProcessMessages;
end;
asmodey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42
Как страницу текста в doc преобразовать в картинку ? bdfy Microsoft Office Word 6 16.06.2010 21:49
Нужно убрать белую полоску на странице Kinash HTML и CSS 7 31.05.2010 09:57
Архиватор чёрно-белых изображений СлаВка! Помощь студентам 2 17.05.2010 06:23
Как присвоить итему меню при выделении цветную картинку? SkAndrew Общие вопросы Delphi 2 07.08.2008 17:43