Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2012, 18:13
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию как найти центр квадрата?

Доброго времени суток.Есть такая картинка http://www.delphisources.ru/forum/at...d=133026497 6
Прямоугольник (на картинке он обозначен зеленым) может менятся как по вертикали так и по горизонтали. Возникает вопрос как найти центр прямоугольника? Поиском пикселей пользуюсь scanline-ом.
Изображения
Тип файла: jpg 1.jpg (1.9 Кбайт, 36 просмотров)
Ответить с цитированием
  #2  
Старый 26.02.2012, 20:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Находим первый зеленый пиксел (лево верх). Находим также право низ (последний зеленый). Получаем 2 точки. Складываем координаты X и делим пополам, складываем Y и делим пополам. Получаем центр.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 26.02.2012, 22:52
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Так ну допустим нахожу я левый верхний пиксель, но по пути будут поподатся другие пиксели этого цвета. Как мне их отсортировать до последнего подходящего пикселя?
Ответить с цитированием
  #4  
Старый 26.02.2012, 23:03
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

На приведенной картинке задача решается элементарно.
Проходим по строкам, запоминаем первый пиксель, который попался зеленого цвета. Потом проходим дальше, и запоминаем зеленые пиксели с максимальными X или Y, сохраняя в переменные XMax и YMax соответствующие координаты. Доходим до конца картинки. Получим 2 точки: одна - первая, другая - с координатами XMax и YMax.
Если же картинка другая - то надо выкладывать реальную картинку и думать.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 27.02.2012, 10:06
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Здесь получается такая проблема.Максимальные значения нахожу но при переходе с одного модуля в другой у сохраненные данные стираются.Вот код:
Код:
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.
Через процедуру new данные сохраняются, но когда снова вызывается процедура kvadrat снова вызывается процедура new и данные в xmax и ymax стираются.Помогите решить Задачу.
Ответить с цитированием
  #6  
Старый 27.02.2012, 10:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Прямоугольник кто рисует?
Ответить с цитированием
  #7  
Старый 27.02.2012, 10:47
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Прямоугольник рисует экран.Я делаю скриншот с экрана, затем скрин копирую в image.А оттуда для поиска пикселей копирую в bitmap.
Ответить с цитированием
  #8  
Старый 27.02.2012, 11:33
Аватар для Klyaksa
Klyaksa Klyaksa вне форума
Новичок
 
Регистрация: 07.01.2012
Сообщения: 90
Репутация: 10
По умолчанию

Ну вроде разобрался.Данные у меня стирались из-за того что переменные были не глобальными.
Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter