![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Доброго времени суток.Есть такая картинка http://www.delphisources.ru/forum/at...d=133026497 6
Прямоугольник (на картинке он обозначен зеленым) может менятся как по вертикали так и по горизонтали. Возникает вопрос как найти центр прямоугольника? Поиском пикселей пользуюсь scanline-ом. |
|
#2
|
||||
|
||||
|
Находим первый зеленый пиксел (лево верх). Находим также право низ (последний зеленый). Получаем 2 точки. Складываем координаты X и делим пополам, складываем Y и делим пополам. Получаем центр.
|
|
#3
|
||||
|
||||
|
Так ну допустим нахожу я левый верхний пиксель, но по пути будут поподатся другие пиксели этого цвета. Как мне их отсортировать до последнего подходящего пикселя?
|
|
#4
|
||||
|
||||
|
На приведенной картинке задача решается элементарно.
Проходим по строкам, запоминаем первый пиксель, который попался зеленого цвета. Потом проходим дальше, и запоминаем зеленые пиксели с максимальными X или Y, сохраняя в переменные XMax и YMax соответствующие координаты. Доходим до конца картинки. Получим 2 точки: одна - первая, другая - с координатами XMax и YMax. Если же картинка другая - то надо выкладывать реальную картинку и думать. |
|
#5
|
||||
|
||||
|
Здесь получается такая проблема.Максимальные значения нахожу но при переходе с одного модуля в другой у сохраненные данные стираются.Вот код:
Код:
unit center;
interface
uses windows,sysutils;
type
TCustomer = Record
xmax,ymax : integer;
end;
procedure kvadrat(x,y:integer);
var
custRecPtr : ^TCustomer;
implementation
uses boot;
procedure kvadrat(x,y:integer);
begin
new(custRecPtr);
custRecPtr.xmax:=x;
custRecPtr.ymax:=y;
end;
end. |
|
#6
|
||||
|
||||
|
Прямоугольник кто рисует?
|
|
#7
|
||||
|
||||
|
Прямоугольник рисует экран.Я делаю скриншот с экрана, затем скрин копирую в image.А оттуда для поиска пикселей копирую в bitmap.
|
|
#8
|
||||
|
||||
|
Ну вроде разобрался.Данные у меня стирались из-за того что переменные были не глобальными.
Код:
unit center; interface uses windows,sysutils; procedure kvadrat(x,y:integer); var xmax,ymax : integer; implementation uses boot; procedure kvadrat(x,y:integer); begin xmax:=x; ymax:=y; end; end. Код:
unit center; interface uses windows,sysutils; procedure kvadrat(x,y:integer); implementation uses boot; procedure kvadrat(x,y:integer); var xmax,ymax : integer; begin xmax:=x; ymax:=y; end; end. Последний раз редактировалось Klyaksa, 27.02.2012 в 11:55. |