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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 22:22   #1
KSanch
 
Регистрация: 18.04.2015
Сообщений: 3
По умолчанию Составить алгоритм по имеющейся процедуре бинаризации

Примерно понимаю как работает программа, только не пойму что такое LO в функции, и как эту функцию в алгоритм засунуть( и не понимаю вот это что зачем
Код:
Bitmap.PixelFormat := pf24Bit;
  C1 := ColorToRGB(Color1);
  C2 := ColorToRGB(Color2);
Dest := Bitmap.ScanLine[y];
Чем вообще выступает переменная Dest, и почему она в степень потом :-| Помогите пожалуйста, очень срочно
Код:
procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor); //Порог между двумя цветами на Bitmap
type
  TRGB = record
  B, G, R: Byte;
  end;
  pRGB = ^TRGB;
function ColorToRGB(Color: TColor): TRGB;
 begin
   with Result do
    begin
      R := Lo(Color);
      G := Lo(Color shr 8);
      B := Lo((Color shr 8) shr 8);
    end;
 end;
var
  x, y: Word;
  C1, C2: TRGB;
  Dest: pRGB;
begin
  Bitmap.PixelFormat := pf24Bit;
  C1 := ColorToRGB(Color1);
  C2 := ColorToRGB(Color2);
  for y := 0 to Bitmap.Height - 1 do
  begin
    Dest := Bitmap.ScanLine[y];
    for x := 0 to Bitmap.Width - 1 do
    begin
      //если среднеарифметическое R, G и B больше Value,
      //то точку (x, y) закрашиваем цветом Color1,
      //иначе - цветом Color2
      if (Dest^.r + Dest^.g + Dest^.b) / 3 > Value then
        Dest^ := C1
      else
        Dest^ := C2;
      Inc(Dest);
    end;
  end;
end;

Последний раз редактировалось Аватар; 05.06.2015 в 22:25.
KSanch вне форума Ответить с цитированием
Старый 06.06.2015, 00:19   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
только не пойму что такое LO в функции
А в справке посмотреть в лом?
Lo

Цитата:
Чем вообще выступает переменная Dest, и почему она в степень потом
Это не степень. Это разименование указателя pRGB = ^TRGB;
Может учебник почитаешь?
northener вне форума Ответить с цитированием
Старый 06.06.2015, 11:17   #3
KSanch
 
Регистрация: 18.04.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А в справке посмотреть в лом?
Это не степень. Это разименование указателя pRGB = ^TRGB;
Может учебник почитаешь?
Если, наверное , было время читать учебники, то не писал бы на форум. И не скажешь тогда зачем форумы придумали? Чтобы отправлять всех читать учебники? Не хочешь помочь лучше бы не писал
KSanch вне форума Ответить с цитированием
Старый 06.06.2015, 12:38   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

KSanch, а почему Вы огрызаетесь вместо того, чтобы поблагодарить?
Вам ответили на оба ваших вопроса.
Ещё что-то осталось непонятным?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2015, 13:43   #5
KSanch
 
Регистрация: 18.04.2015
Сообщений: 3
По умолчанию

Все, всем спасибо. Получилось как то так.
Оператор Bmp.PixelFormat:=pf24bit устанавливает, что каждый из трех основных цветов будет выражаться кодом из 8 бит.
Операторы C1 :=ColorToRGB(Color1) и C2 := ColorToRGB(Color2) раскладывают полученные цвета на составляющие R, G, B.
Далее идет цикл по всей высоте изображения BMP
В операторе Dest := Bitmap.ScanLine[y] свойство ScanLine обеспечивает быстрый доступ к отдельным пикселям.
Далее идет цикл по всей ширине изображения BMP. За этим следует проверка условия: если среднеарифметическое R, G и B больше Value, то точку (x, y) закрашиваем цветом Color1, иначе - цветом Color2.

KSanch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить алгоритм michal3003 Помощь студентам 0 19.05.2011 17:16
Составить алгоритм Vikenty Помощь студентам 3 27.05.2010 22:32
Могу ли я извлечь данные, из БД не зная напрямую название имеющейся в ней таблицы. Cabyrc БД в Delphi 11 27.03.2009 01:16