На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS

Дорогие друзья! Поздравляем вас с Новым 2025 годом!

Всем удачи, успеха и благополучия!

msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Алгоритм поиска прямоугольников в bmp , Алгоритм поиска прямоугольников в bmp
    Добрый день. Есть задача поиска прямоугольников в BMP файле со следующими параметрами:
    1) исходный файл черно-белый (белый цвет значащий), разрядность 1-бит
    2) размер файла 1920х1031 пиксель, но это не принципиально, размеры могут быть всякие
    3) фигуры внутри файла могут быть всякие, но это не принципиально, нужны только прямоугольники, даже если сложная фигура будет определена как прямоугольник значения не имеет

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

    ExpandedWrap disabled
      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 результат поиска

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

    Заранее спасибо за ответы по ЗАДАННЫМ вопросам
    Прикреплённый файлПрикреплённый файлdata.zip (1,17 Кбайт, скачиваний: 10)
    Прикреплённый файлПрикреплённый файлfile.zip (2,02 Кбайт, скачиваний: 9)
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0181 ]   [ 18 queries used ]   [ Generated: 20.01.25, 06:17 GMT ]