Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

Раскраска   Найти похожие ветки 

 
Dimich1978   (2005-11-12 07:58) [0]

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


 
MBo ©   (2005-11-12 09:05) [1]

Если ты делаешь FloodFill, то граница, если она другого цвета, останется нетронутой


 
Dimich1978   (2005-11-12 09:29) [2]

через FloodFill я уже сделал. У меян получается два режима будет. Один работает основанный на FloodFill, т.е. закраска до fsBorder. Но я хочу привинтить и еще один вариант закраски, не автоматический, т.е. когда не достаточно одного клика мышкой чтобы залить область. А хочу чтобы ребенок сам зарисовал, т.е. развивал свои руки, а не тыкал, хотя вариант "тыканья" я оставляю тоже и он сейчас как раз и работает.
Еще раз скажу, что надо чтобы ребенок сам закрасил область и чтобы рисунок было видно, судя по моему исходнику закрашивается рисунок, а мне надо чтобы рисунок остался видим. Я смотрю в сторону смешения цветов, но как это сделать не знаю...почитал...толку мало...на вас одна надежда.
Мой вариаент зарисовки вручную:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
  with image1.canvas do
  Pen.Mode := AMode;
if i=1 then
    begin
        image1.Canvas.LineTo(X, Y);
      StatusBar1.Panels[1].Text := Format("Current: (%d, %d)", [X, Y]);
    end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
i:=1;{Через этот параметр я определяю нажатали левая кнопка или нет}
image1.Canvas.Pen.Width:=30;
image1.Canvas.pen.Color:=clred;
image1.Canvas.MoveTo(X, Y);
Image1.Canvas.Brush.Color:=clgreen;
Image1.Canvas.FloodFill(x, y, clblack, fsBorder);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
i:=0;
end;


 
GrayFace ©   (2005-11-12 10:23) [3]

Можно, например, так:
(в Image2 - изначальная черно-белая картинка)

var x0,y0:integer;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var x1,y1,x2,y2,w:integer;
begin
  with image1.canvas do
  Pen.Mode := AMode;
  if i=1 then
    with image1.Canvas do
    begin
      LineTo(X, Y);
      w:=Pen.Width;
      x1:=min(x-w,x0-w);
      y1:=min(y-w,y0-w);
      x2:=max(x+w,x0+w);
      y2:=max(y+w,y0+w);
      BitBlt(Handle, x1,y1,x2-x1+1,y2-y1+1, Image2.Picture.Bitmap.Handle,
        0,0,SRCAND);
      StatusBar1.Panels[1].Text := Format("Current: (%d, %d)", [X, Y]);
    end;
  x0:=x;
  y0:=y;
end;


 
Deka ©   (2005-11-12 10:47) [4]

А может быть контурное изображение помнить где-нибудь в буфере и накладывать его сверху на то, которое будет нарисовано кустью? Тогда абсолютно все равно каким цветом идет рисование и потом можно будет убрать контур.


 
Dimich1978   (2005-11-12 14:55) [5]

спасибо все получилось


 
GrayFace ©   (2005-11-15 18:53) [6]

Да, с таким же успехом можно поставить Image2.TransparentColor:=clWhite, а рамку любого цвета, и делать Draw.


 
злобная танька ©   (2005-11-15 19:16) [7]


> GrayFace ©   (15.11.05 18:53) [6]

это мигать будет безбожно



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.042 c
1-1131584384
Dementiy
2005-11-10 03:59
2005.12.04
Browse For Folder Dialog


1-1131532904
jack128
2005-11-09 13:41
2005.12.04
Совместное чтение/запись из стораджа (IStorage)


14-1131431975
Shopot
2005-11-08 09:39
2005.12.04
Рисование в Delphi.


14-1131993278
Антоха зарядник
2005-11-14 21:34
2005.12.04
написание 3D игр на PHP ищу книжку


4-1128325148
Андрей Жук
2005-10-03 11:39
2005.12.04
Где ошибка?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский