Мульти-пульти или рисование на TImage
Имеется два TImage A, B - один под другим(А - фон(картинка), В - пустой для рисования).
Хочу спросить всех: можно ли как нибудь рисовать в <В> так, что бы при этом сохранялась картинка в <А>?
Суть в том, чтобы <В> использовать как слой(типа как в Photoshop-е, Flash-е и т.д.)
А может это делается совсем другими вещами? Подскажите пожалуйста.
Всем привет!
Имеется два TImage A, B - один под другим(А - фон(картинка), В - пустой для рисования).
Хочу спросить всех: можно ли как нибудь рисовать в <В> так, что бы при этом сохранялась картинка в <А>?
Суть в том, чтобы <В> использовать как слой(типа как в Photoshop-е, Flash-е и т.д.)
А может это делается совсем другими вещами? Подскажите пожалуйста.
Можно завести еще 3 TImage A+B и собирать его каждый раз из A и B
А можно испльзовать свойство :
Specifies whether the background of the image obscures objects below the image object.
__property bool Transparent = {read=FTransparent, write=SetTransparent, default
=0};
Description
Set Transparent to true to allow objects behind the TImage object to show through the background of the image. Set Transparent to false to make the background of the image opaque. Setting Transparent sets the Transparent property of the Picture.
Note: Transparent has no effect unless the Picture property specifies a TBitmap object.
нелохо бы услышать саму задачу... что вообще надо сделать...
Извиняюсь за неясность, уточню.
Моя задача похожа на рисование часов: есть картинка-фон(циферблат) - она не меняется. И на этом циферблате должны отображаться стрелочки, но простое рисование стрелочек (нарисовал цветом А, сместил координаты - нарисовал цветом фона) на канве имейджа (где стрелочки) затирает фон.
Я пытаюсь установить некий цвет как прозрачный - но все равно рисование затирает фон.
Извиняюсь за неясность, уточню.
Моя задача похожа на рисование часов: есть картинка-фон(циферблат) - она не меняется. И на этом циферблате должны отображаться стрелочки, но простое рисование стрелочек (нарисовал цветом А, сместил координаты - нарисовал цветом фона) на канве имейджа (где стрелочки) затирает фон.
Я пытаюсь установить некий цвет как прозрачный - но все равно рисование затирает фон.
Поэкспериментируй со свойством CopyMode
Поэкспериментируй со свойством CopyMode
ImageB->Transparent = true решает проблему. Я уже это предлагал.
ImageB->Transparent = true решает проблему. Я уже это предлагал.
Спасибо, попробую.
#define _PutImage_XY(target,source,x,y) target->Canvas->CopyMode=cmSrcAnd; target->Canvas->CopyRect(Rect(x,y,x+source->Width,y+source->Height),source->Canvas,Rect(0,0,source->Width,source->Height));
#define _PutImage_XY_B(target,source,x,y) target->Canvas->CopyMode=cmSrcPaint; target->Canvas->CopyRect(Rect(x,y,x+source->Width,y+source->Height),source->Canvas,Rect(0,0,source->Width,source->Height));
#define _ClsImage(target,source) target->Canvas->CopyMode=cmWhiteness; target->Canvas->CopyRect(Rect(0,0,target->Width,target->Height),source->Canvas,Rect(0,0,target->Width,target->Height));
#define _ClsImage_B(target,source) target->Canvas->CopyMode=cmBlackness; target->Canvas->CopyRect(Rect(0,0,target->Width,target->Height),source->Canvas,Rect(0,0,target->Width,target->Height));
.................
{
Canv->Brush->Color=FillCl;
if(Canv->Pixels[width/2][height/2]!=BorderCl)
Canv->FloodFill(width/2,height/2,BorderCl,fsBorder);
Canv->CopyMode=cmPatInvert;
Canv->CopyRect(Rect(0,0,width,height),Canv,Rect(0,0,width,height));
}
........................
MainForm->AImage->Picture->LoadFromFile(DirI+FileName+".bmp");
MainForm->MaskImage->Picture->LoadFromFile(DirI+FileName+".bmp");
MakeMask(MainForm->MaskImage->Canvas,MainForm->MaskImage->Width,
MainForm->MaskImage->Height,clWhite,clBlack);
_PutImage_XY(MainForm->ZImage,MainForm->MaskImage,x,y);
_PutImage_XY_B(MainForm->ZImage,MainForm->AImage,x,y);}
........
_FlipImage_XY(MainForm->MainImage,MainForm->ZImage,0,0);
получалось :-)