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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2016, 09:17   #31
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

В чём проблема пишешь 2-3 функции

Код:
function SumInRect(const bmp:TBitmap; const Rect:TRect):Integer;
var i,j:Integer;
begin
Result:=0;
  for j:=Rect.Bottom to Rect.Top do
    for i:=Rect.Left to Rect.Right do
      if bmp.Canvas.Pixels[i,j]=clWhite then Inc(Result);

end;

procedure Detect(const bmp:TBitmap; const N:Integer);
var i,j:Integer;
sun:Integer;
const
 r=20;
begin
  for j:=0 to Bmp.Height div r-1 do
    for i:=0 to Bmp.Width div r-1 do
      begin
      Sum:=SumInRect(bmp, Rect(i*r,j*r,i*r+r,j*r+r));
      if Sum>N then Add(i,j); // Тут вместо Add делаешь вывод координат в нужном формате
      end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.03.2016, 15:01   #32
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Короче, у меня вот так получилось.


Составляется именно список ячеек сетки, как просил.
Дальше сам, мне надоело. Исходники внутри. Написал тебе независимый класс TBitmapComparer, который и занимается сравнением двух картинок и составляет список.

Код:
type
  TBitmapComparer = class(TList<TRect>)
  private
    LBitmap0: TBitmap;
    LBitmap1: TBitmap;
    FResultBitmap: TBitmap;
    FBackground: TColor;
    FGridStepX: Integer;
    FGridStepY: Integer;
    FGridColor: TColor;
    FROP: DWORD;
    FTriggerPercent: Integer; // 1...100% - доля точек в ячейке сетки, отличающихся от фона, для добавления ячейки в список

    FBackgroundRGB: TRGBTriple;
  private
    function GetColCount: Integer;
    function GetRowCount: Integer;
    function GetCellSquare: Integer; // площадь ячейки
    function GetTrigger: Integer; // абсолютное кол-во нефоновых точек (рассчитывается динамически)
  protected
    function GetResult: TBitmap; virtual;
    function ScanCell(const ACell: TRect): Boolean;
    procedure DrawToResult;
  public
    constructor Create;// override;
    destructor Destroy; override;
    procedure Recalculate;

    property Bitmap0: TBitmap read LBitmap0 write LBitmap0;
    property Bitmap1: TBitmap read LBitmap1 write LBitmap1;
    property ResultBitmap: TBitmap read GetResult;
    property Background: TColor read FBackground write FBackground default clBlack;
    property GridStepX: Integer read FGridStepX write FGridStepX default 16;
    property GridStepY: Integer read FGridStepY write FGridStepY default 16;
    property GridColor: TColor read FGridColor write FGridColor default clLime;
    property TriggerPercent: Integer read FTriggerPercent write FTriggerPercent default 5;
    property Trigger: Integer read GetTrigger;
    property CellSquare: Integer read GetCellSquare;
    property ROP: DWORD read FROP write FROP default SRCINVERT;
    property RowCount: Integer read GetRowCount;
    property ColCount: Integer read GetColCount;
  end;
Можешь взять за основу и допиливать.
Можешь не благодарить.
Вложения
Тип файла: zip pf_290512.7z.zip (1.12 Мб, 19 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.03.2016, 15:21   #33
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию


У меня вот так вышло. Даже цвет сетки одинаковый D

Всем Спасибо. Тема закрыта благодаря min@y™,Pavia, и krapotkin и другого форума.
stlcrash вне форума Ответить с цитированием
Старый 19.03.2016, 15:56   #34
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение

Можешь взять за основу и допиливать.
Можешь не благодарить.
Плохой ексшеник у тебя.... айайай так шутить)

хммм очень интереная тема, возможно кому-то вдруг пригодится я использовал еще библиотеку FastFrench точнее из нее перевел С код на Delphi https://github.com/FastFrench/FastFind
Сам код где-то в исходниках лежит, там все-го одна функция нужна, с нее смог сделать тоже самое что и вы для игры World of Warplanes

Последний раз редактировалось IvaniuS; 19.03.2016 в 16:01.
IvaniuS вне форума Ответить с цитированием
Старый 19.03.2016, 16:05   #35
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Плохой ексшеник у тебя
это почему?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.03.2016, 16:33   #36
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

из-за
Код:
ufBsod.pas
так и инфаркт можно схлопотать
Простите за оффтоп.
IvaniuS вне форума Ответить с цитированием
Старый 19.03.2016, 16:41   #37
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
так и инфаркт можно схлопотать
картинка слишком безобидная. это ж мотиватор! он там не только для прикола. И звуковое сопровождение - тоже.

выброшу и заменю на кадр из фильма "звонок".
меняй памперсы чаще!

кстати, ты-то какого МПХ прогу взял? она ж не для тебя.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 20.03.2016, 00:10   #38
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Я всегда отдаю исходники. Причём бесплатно.
Они автоматически пришпиливаются в ЕХЕ и извлекаются оттудова обычно по Shift+F11. Это я не только тебе говорю.
вот по этому и забрал к себе тоже)
IvaniuS вне форума Ответить с цитированием
Старый 20.03.2016, 00:13   #39
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
вот по этому и забрал к себе тоже)
да мне не жалко. только зачем?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.05.2016, 01:02   #40
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Продолжение темы )
Задачу звучит так:
Есть изображение в формате BMP. В нем нужно закрасить все пиксели определенного цвета. в белый.
На примере все "не нужные" пиксели обведены овалом.

Тоесть есть при нажатии на кнопку с BMP файла удаляются все пиксели, которые совпадают с цветами пикселей обведенных в овал.

PS массив цветов задается в программе. тоесть цвета удаляемых пикселей всегда одинаковые.

PSS Если совсем по простому объяснить то нужно удалить с картинки всю Воду.
stlcrash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение изображений. C# Serg94 Помощь студентам 1 27.11.2012 19:43
Сравнение 2 изображений wlords Помощь студентам 0 23.11.2010 20:47
Сравнение изображений AmbaQ Общие вопросы Delphi 1 07.08.2010 19:20
Delphi - сравнение изображений battlefrogg Помощь студентам 7 17.07.2010 18:58
Сравнение изображений DeDoK Общие вопросы Delphi 1 11.10.2008 21:16