Форум: "Основная";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
ВнизКак при копировании битмапа сделать цвет прозрачным? Найти похожие ветки
← →
Коля (2002-04-22 01:59) [0]Какое значение Brush.Color нужно поставить чтобы clFuchsia стал прозрачным? в хелпе пол часа рылся, но так и не нашел...
Brush.Color:= ???;
BrushCopy(rect(0,0,50,95), hр.picture.bitmap, rec(0,0,50,95), clFuchsia);
← →
Сергей Чурсин (2002-04-22 03:44) [1]А никакое...
Тебе ведь настоящая transparency нужна ?
- из хелпа "Color specifies the color in Bitmap to replace with the Brush of the canvas"
Будь это не битмар, а вектор - Brush.Style:=bsClear
a так - ищи специальные компоненты,
или пробуй сделать что-нибудь через scanline,
или лучше через регионы (SelectClipRgn)
Вот, что-то на диске валялось, не знаю, работает или нет:
How to create transparent bitmaps
{ ... }
if (FTmpComp.Transparent) and (FTmpComp.CellMask.Width = 0) then
{need to draw w/out cellmask}
try
{Setup temp bitmaps}
TmpBitmap := TBitmap.Create;
TmpBitmap.Height := FTmpComp.Height;
TmpBitmap.Width := FTmpComp.Width;
MskBitmap := TBitmap.Create;
MskBitmap.Height := FTmpComp.Height;
MskBitmap.Width := FTmpComp.Width;
MskBitmap.Monochrome := True;
ImgBitmap := TBitmap.Create;
ImgBitmap.Height := FTmpComp.Height;
ImgBitmap.Width := FTmpComp.Width;
{Create Mask}
MskBitmap.Canvas.Brush.Color := clWhite;
MskBitmap.Canvas.BrushCopy(DRect, FTmpComp.CellPicture, SRect,
FTmpComp.CellPicture.Canvas.Pixels[0, 0]);
MskBitmap.Canvas.CopyMode := cmSrcInvert;
MskBitmap.Canvas.CopyRect(DRect, FTmpComp.CellPicture.Canvas, SRect);
{Create "blacked out" image}
ImgBitmap.Canvas.CopyMode := cmNotSrcCopy;
ImgBitmap.Canvas.CopyRect(Drect, MskBitmap.Canvas, DRect);
ImgBitmap.Canvas.CopyMode := cmSrcAnd;
ImgBitmap.Canvas.CopyRect(DRect, FTmpComp.CellPicture.Canvas, SRect);
{Copy background from FPicture into the temp bitmap}
TmpBitmap.Canvas.CopyMode := cmSrcCopy;
TmpBitmap.Canvas.CopyRect(DRect, FPicture.Canvas, FRect);
{AND the mask into the background to provide "cut-out"}
TmpBitmap.Canvas.CopyMode := cmSrcAnd;
TmpBitmap.Canvas.CopyRect(DRect, MskBitmap.Canvas, DRect);
{PAINT the CellPicture into the hole}
TmpBitmap.Canvas.CopyMode := cmSrcPaint;
TmpBitmap.Canvas.CopyRect(DRect, ImgBitmap.Canvas, DRect);
{finally copy the temp bitmap onto the main canvas}
Canvas.CopyMode := cmSrcCopy;
Canvas.CopyRect(FRect, TmpBitmap.Canvas, DRect);
{mark the Cell as having been updated}
FTmpComp.IsDirty := False;
finally
{free the bitmaps}
TmpBitmap.Free;
MskBitmap.Free;
ImgBitmap.Free;
end;
← →
Коля (2002-04-22 05:08) [2]Спасибо за помощь!
Попробовал Brush.Style:=bsClear - получилась прозрачность! правда пришлось битмап в Image засунуть..
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c