![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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.  |