Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм поиска прямоугольников в bmp, Алгоритм поиска прямоугольников в bmp 
:(
    Опции темы
Pcrepair
Дата 7.1.2025, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Добрый день. Есть задача поиска прямоугольников в BMP файле со следующими параметрами:
1) исходный файл черно-белый (белый цвет значащий), разрядность 1-бит
2) размер файла 1920х1031 пиксель, но это не принципиально, размеры могут быть всякие
3) фигуры внутри файла могут быть всякие, но это не принципиально, нужны только прямоугольники, даже если сложная фигура будет определена как прямоугольник значения не имеет

текущий код позволяет найти координаты прямоугольников те что справа после первого найденного прямоугольники

Код

procedure TMain.Button1Click(Sender: TObject);
var
  rLeft, rTop, rRigth, rBottom, rMinH, rMinW: Integer;
  glBitMap: Vcl.Graphics.TBitmap;
  rRestsList: string;
begin  // запуск процесса поиска
  glBitMap := TBitmap.Create;
  try
    if FindRects(glBitMap, rRestsList) then
      Memo1.Lines.Add(rRestsList);
  finally
    FreeAndNil(glBitMap);
  end;
end;

(* 2024.12.21 to find all exseptable rectigies coordinates in bmp *)
function FindRects(const aBitmap: Vcl.Graphics.TBitmap; var aRestsList: string): Boolean;
var
  H, W, hStart, wStart: Integer;
  stFlg: Boolean;
  Clr, aLeft, aTop, aRigth, aBottom: Integer;
  RestsList: string;
begin
  Result := false;
  hStart := 0;  // установка поиска в начало координат файл.БМП
  wStart := 0;

  repeat // повтор поиска
    stFlg := false;
    
    // функция DefineRectCoo возвращает ДА и координаты лево-верх-справа-низ ПЕРВОГО! найденного прямоугольника в файл.БМП
    if DefineRectCoo(aBitmap, hStart, wStart, aLeft, aTop, aRigth, aBottom) then  
    begin
      (* send data to output *)  //сбор координат найденных прямоугольников
      Insert((IntToStr(aLeft) + ':' + IntToStr(aTop) + ':' + IntToStr(aRigth) + ':' + IntToStr(aBottom) +
        sLineBreak), aRestsList, (aRestsList.Length + 1));
      (* ---------------------- *)

      stFlg := true; //запуск повторного поиска
    end;

    (* next rigth-top rect *)
    hStart := aTop; wStart := aRigth + 1;  //поиск из новой начальной точки: верх-справа от найденного прямоугольника

  until (stFlg = false);

  if (aRestsList.Length > 0) then
    Result := true;
end;
(* -------------------------------------------- *)


все почти хорошо, но определяюттся только координаты всех прямоугольников которые справа от найденного hStart := aTop; wStart := aRigth + 1; никак не придумаю алгоритм для поиска всех прямоугольников
file.bmp входной файл
data.bmp результат поиска

вопрос: может кто что подскажет по алгоритму?

Заранее спасибо за ответы по ЗАДАННЫМ вопросам


Это сообщение отредактировал(а) Pcrepair - 7.1.2025, 18:17

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  bmp.zip 3,27 Kb
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.