Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 520

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!

Проблема состоит, в том что не знаю как отработать с компонентом image, такой момент как рисование в нем, а точнее мне нужно чтобы выбранный рисунок заменил курсор, на OnClick отметился в image и после того как он там прорисовывается остался там... Дальше думаю сохранять полученный результат через функцию Image1.Picture.SaveToFile();

Вот примерно то что нужно+) но даже не знаю как сделать, помню сидел в IRC, и у кого то редактор метайфайлов взять получилось, но так что-то не разобрался что там к чему. Помогите пожалуйста.

Это примерная разработка интерфейса
http://s016.radikal.ru/i334/1107/ab/58052a3c7ae6.jpg

Приложение:
  1. http://s016.radikal.ru/i334/1107/ab/58052a3c7ae6.jpg
  2. Embarcadero RAD Studio 2010
  3. Windows 7 proffesional.
  4.  


winner13 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 22 июля 2011, 19:59
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 25 июля 2011, 11:23; участников в обсуждении: 4.
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 20:26 [#1]:

Я не понял.
Чисти код! Чисти код! Чисти код!
winner13

winner13 (статус: 1-ый класс), 22 июля 2011, 22:07 [#2]:

НУ тут как бы нужно просто в image просто рисовать, но рисовать не конвасом как карандашом, а грузить bmp файл и им как бы как кистью,вот. А в целом, выбирать кисть слева из панели(в рисунке показанно) и рисовать этим что выбрал по image1 .
Не решимых проблем нет, есть неприятные для нас решения.
winner13

winner13 (статус: 1-ый класс), 22 июля 2011, 23:28 [#3]:

Просто цель квеста нарисовать по памяти руну , дальше сохраняется изображение в файл, и сравнивается по цветам в разных точках на совпадение с исходным вариантом.
Не решимых проблем нет, есть неприятные для нас решения.
bugmenot

bugmenot (статус: 3-ий класс), 23 июля 2011, 02:20 [#4]:

Цитата (winner13):

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

что такое метай-файлы?

Курсор рисуется функцией DrawIcon
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 23 июля 2011, 02:51 [#5]:

Мда. Сравнивать изображения нужно с помощью искуственной нейронной сети, хотя бы с одним скрытым слоем, а попасть пиксель в пиксель для того, чтобы квест пройти это глупость.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 23 июля 2011, 03:40 [#6]:

А что это значит? Я забросил на DalNet.ru зависать и не в курсе тамошних событий.

Цитата (Gooddy):

Сравнивать изображения нужно с помощью искуственной нейронной сети

Можно проще, с помощью корреляционной функции.

Цитата (Gooddy):

пиксель

Негодую! :­-­D
виконання програми розпочинається з того самого мiсця, де призупинилося.

winner13

winner13 (статус: 1-ый класс), 23 июля 2011, 09:52 [#7]:

Ссори за ошибки всё делается в спешке, и по невнимательности получается всякое. Если по теме сам в прицепе решил вопрос , код получился кривоватый конечно, но кому нужно то пожалуйста выкладываю:
 
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Button1: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.SaveToFile('result.bmp');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile('base.bmp');
Image2.Picture.LoadFromFile('1.bmp');
Image3.Picture.LoadFromFile('2.bmp');
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
  Image1.Canvas.BrushCopy(Rect(x-(Image2.Width div 2),
y-(Image2.Height div 2), x+(Image2.Width div 2), y+(Image2.Height div 2)),
Image2.Picture.Bitmap, Rect(0, 0, Image2.Width, Image2.Height), 0);
end;
 
end.

Теперь вот думаю как сделать выбор чтобы можно было частями руну рисовать из нескольких рисунков, и как сделать так чтобы выбираемый image рисовался, именно под курсором, а не в стороне справа-сверху на 30 пикслей примерно дальше курсора.

(Так же сейчас пойду гуглить на счёт нейроной сети, что это такое и как реализовывается, и про корреляционную функцию.)
Не решимых проблем нет, есть неприятные для нас решения.
Gooddy

Gooddy (статус: 3-ий класс), 24 июля 2011, 00:32 [#8]:

bugmenot: http://ru.wikipedia.org/wiki/Пиксель

Общего правила нет, это как ява/джава.

А код нормальный за исключением
Image1.Canvas.BrushCopy(Rect(x-(Image2.Width div 2),
y-(Image2.Height div 2), x+(Image2.Width div 2), y+(Image2.Height div 2)),
Image2.Picture.Bitmap, Rect(0, 0, Image2.Width, Image2.Height), 0);

Ну и загрузка 3-ёх изображений.

Ну и непереименованные компоненты.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 24 июля 2011, 09:36 [#9]:

Цитата (Gooddy):


А вот не надо, педивикия - не орфографический словарь. И статьи желательно читать прежде чем на них ссылаться :­-­P
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 24 июля 2011, 14:45 [#10]:

bugmenot: я читал статью и по названию там ничего не понятно. По ГОСТу - пиксель, по словарю какого то мужика - пиксел.
Чисти код! Чисти код! Чисти код!
bugmenot

bugmenot (статус: 3-ий класс), 24 июля 2011, 16:05 [#11]:

Цитата (Gooddy):

и по названию там ничего не понятно. По ГОСТу
Дык надо было сразу на ГОСТ ссылаться, если здоровенная часть статьи посвящена спорам о правильности написания :­-­)
Тогда я бы назвал этот ГОСТ лажей еще сегодняшним утром :­-­)

Рекомендую причастится научной литературой по цифровой обработке изображений.
виконання програми розпочинається з того самого мiсця, де призупинилося.

winner13

winner13 (статус: 1-ый класс), 25 июля 2011, 09:47 [#12]:

Gooddy:
А код нормальный за исключением
Image1.Canvas.BrushCopy(Rect(x-(Image2.Width div 2),
y-(Image2.Height div 2), x+(Image2.Width div 2), y+(Image2.Height div 2)),
Image2.Picture.Bitmap, Rect(0, 0, Image2.Width, Image2.Height), 0);

-------------------------------------------------------
Хах, а акромя этого кода всё делфёвое =), если есть варианты как нормально сделать, я бы не отказался просто на данный момент мне нужно сделать выбор нескольких изображений который можно было наносить на карту.через радиогруп реализовал, хз вроде нормально всё,но всё таки кривовато. Нужно чтобы под курсором была дорисовка, а оно блин выше и левее на 30 пикслей идёт зараза.
Не решимых проблем нет, есть неприятные для нас решения.
winner13

winner13 (статус: 1-ый класс), 25 июля 2011, 11:20 [#13]:

АААААААААААААААА, ПОМОГИТЕ!!!

Сейчас свожу код, из своей формы нужно запустить уже заранее приатаченный к проекту res_map.pas, с формой в нем ResForm, вывод формы осуществляется с MainMenu событием OnClick вот таким кодом:

begin
 ResForm:= ResForm.Create(Application);
 ResForm.ShowModal;
 ResForm.Free;
end;

На что после компиляции получаю вот такой вот ответ====>
Это из делфёвого дебагера:

First chance exception at $75369617. Exception class EComponentError with message 'A component named StatusBar already exists'. Process Project1.exe (3304)

First chance exception at $75369617. Exception class EStackOverflow with message 'Stack overflow'. Process Project1.exe (3304


Если без делфя запускать то просто выдаёт сообщения что то о ошибке памяти , точнее не запомнил. =(


Помогите пожалуйста , что делать???
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 25 июля 2011, 11:23 [#14]:

без делфи оно просто сразу выдает ошибку о повреждении памяти и падает.
Нужно открыть dfm файл и посмотреть, нет ли там двух компонентов с именем StatusBar. Если есть - переименовать, что бы не было двух компонентов с одинаковым именем.
Галочка "подтверждения прочтения" - вселенское зло.

25 июля 2011, 15:28: Статус вопроса изменён на решённый (изменил автор вопроса — winner13)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:51
Выполнено за 0.03 сек.