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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.06.2007, 01:41
Arriello Arriello вне форума
Прохожий
 
Регистрация: 13.06.2007
Сообщения: 1
Репутация: 10
По умолчанию Инструмент "палец" - помогите!

Завал с курсовой по информатике.. нужно сделать простенький графический редактор, с инструментом пальца (как в фотошопе, т.е. он тащит за собой и смазывает ту часть изображения по которой проходит).. хоть убей, не знаю даже примерно как его делать искал, искал.. нигде нет ни уроков, ни примеров.. даже похожего ничего нет! Если кто подскажет хотя бы с чего начать - уже буду премного благодарен!

Последний раз редактировалось Arriello, 13.06.2007 в 01:43.
Ответить с цитированием
  #2  
Старый 13.06.2007, 22:49
Аватар для Wipahacker
Wipahacker Wipahacker вне форума
Начинающий
 
Регистрация: 01.06.2007
Адрес: ДОНЕЦК
Сообщения: 112
Репутация: 10
По умолчанию

Спроси у Модераторов они наверняка знают!
Ответить с цитированием
  #3  
Старый 22.06.2007, 22:54
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Раз такое задали тебе сделать по информатике - значит выход есть, если бы это было-бы нереализуемо, то тебе бы не задавали этого. Дерзай, пробуй. Сам не знаю как это сделать.
Ответить с цитированием
  #4  
Старый 29.06.2007, 19:30
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Прикольное задание. Там больше математики, тебе нужно усреднять цвет который был и по которому проходишь сейчас. Щас посижу может что получится)
Ответить с цитированием
  #5  
Старый 29.06.2007, 20:46
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
Подмигивание Каряво, но работает))

Вот что я смог сделать на скорую руку. Думаю главное идея))
Проблема тока в запоминании той позиции с которой начинаем смазывать и местом где смазывание завершается(то есть там где мышка отпускается)
В этом коде смазывается когда мышка двигается, а клик это место запоминания цветов.
Код:
var
  preA : array[1..50,1..50] of TColor; //Массив цветов откуда начинается смазывание
  const s=20; //Размер кисти

//Процедура преобразования из  TColor в R G B
procedure GetRGB(C:TColor; Var R, G, B :byte);
begin
  r     := C;
  g     := C shr 8;
  b     := C shr 16;
end;

//Процедура смазывания цвета
//Тут сила смазывания зависит от значения при DIV'e
//здесь число 10 (preCol div 10) это по идее чем больше число тем сильнее смазывание
Function DevColor(Var Col, preCol:byte):byte;
begin
if Col>preCol then
 begin
 if (Col - preCol div 10)<0 then
  Result:=0 else Result:=Col - preCol div 10;
 end
 else
 if (Col + preCol div 10)>255 then Result:=255
  else Result:=Col + preCol div 10;
end;

//Сама процедура смазывания
//Size - сторона квадрата, X, Y - Координаты верхнего левого угла
procedure Palec(IM:TImage; X,Y, Size :integer);
 Var i, j:integer;
     C, preC:Tcolor;
     R,G,B, preR, preG, preB: byte;
begin
 For I:=1 to S do
  For j:=1 to S do
   Begin
   GetRGB(IM.Canvas.Pixels[x+i,y+j], R,G,B);
   GetRGB(preA[i,j], preR, preG, preB);
   IM.Canvas.Pixels[X+i,Y+j]:=RGB(DevColor(r, prer), DevColor(g, preg), DevColor(g, preg));
   End;
IM.Canvas.TextOut(0,0, IntTOStr(X) + '  ' + IntTOstr(Y));
end;

//Рисуем кружок
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=clred;
Image1.Canvas.Ellipse(200,200,400,400);
end;

//Процедура запоминания цветов
//Лучше наверно запоминать одну точку и уже от нее вычислять а не использовать массив. Пока оставим как есть.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var i,j:integer;
begin
 for i:=1 to s do
  for j:=1 to s do
   preA[i,j]:=Image1.Canvas.Pixels[x+i,y+j];
end;

//Смазывается когда мышка двигается, тут нужно условие сделать чтоб она переставала рисовать ))
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Palec(IMage1, X, Y);
end;
Ответить с цитированием
  #6  
Старый 30.06.2007, 18:27
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию Работает нормально

Вот работающий "палец"))
Вложения
Тип файла: zip Palec.zip (4.0 Кбайт, 28 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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