Форум: "Начинающим";
Текущий архив: 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.46 MB
Время: 0.041 c