Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Как сделать рисунки в Paintbox прозрачными ?

Автор: priboltik 5.06.2007 5:02

Помогите пожалуйста: никак не пойму, как сделать так, чтобы рисунки в PaintBox были прозрачными..????
подскажите, если это вообще возможно, конечно... или елси нет, то как выйти из этой ситуации??

Автор: volvo 5.06.2007 5:07

http://forum.pascal.net.ru/index.php?showtopic=6361 -> Работа с графикой и мультимедиа -> Графические фильтры и эффекты -> Прозрачность -> Как нарисовать BitMap с прозрачностью.

Ты об этом?

Автор: priboltik 5.06.2007 5:58

Цитата(volvo @ 5.06.2007 1:07) *

http://forum.pascal.net.ru/index.php?showtopic=6361 -> Работа с графикой и мультимедиа -> Графические фильтры и эффекты -> Прозрачность -> Как нарисовать BitMap с прозрачностью.

Ты об этом?


ну почти.. good.gif сорри.. у меня старая версия DRKB нельзя ли полностью строки кода, если возможно..

Автор: Ozzя 5.06.2007 12:28

procedure DrawTransparentBmp(Cnv: TCanvas; x,y: Integer; Bmp: TBitmap; clTransparent: TColor);

var

bmpXOR, bmpAND, bmpINVAND, bmpTarget: TBitmap;

oldcol: Longint;

begin

try

bmpAND := TBitmap.Create;

bmpAND.Width := Bmp.Width;

bmpAND.Height := Bmp.Height;

bmpAND.Monochrome := True;

oldcol := SetBkColor(Bmp.Canvas.Handle, ColorToRGB(clTransparent));

BitBlt(bmpAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);

SetBkColor(Bmp.Canvas.Handle, oldcol);



bmpINVAND := TBitmap.Create;

bmpINVAND.Width := Bmp.Width;

bmpINVAND.Height := Bmp.Height;

bmpINVAND.Monochrome := True;

BitBlt(bmpINVAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpAND.Canvas.Handle, 0, 0, NOTSRCCOPY);



bmpXOR := TBitmap.Create;

bmpXOR.Width := Bmp.Width;

bmpXOR.Height := Bmp.Height;

BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);

BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpINVAND.Canvas.Handle, 0, 0, SRCAND);



bmpTarget := TBitmap.Create;

bmpTarget.Width := Bmp.Width;

bmpTarget.Height := Bmp.Height;

BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Cnv.Handle, x, y, SRCCOPY);

BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpAND.Canvas.Handle, 0, 0, SRCAND);

BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpXOR.Canvas.Handle, 0, 0, SRCINVERT);

BitBlt(Cnv.Handle, x, y, Bmp.Width, Bmp.Height, bmpTarget.Canvas.Handle, 0, 0, SRCCOPY);

finally

bmpXOR.Free;

bmpAND.Free;

bmpINVAND.Free;

bmpTarget.Free;

end;

end;


Автор: priboltik 6.06.2007 4:34

а как сделать возможность выделения части изображения на допустим например какого-то Image1????