Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Мульти-пульти или рисование на TImage

6.1K
09 марта 2005 года
Alekc
38 / / 23.12.2004
Всем привет!

Имеется два TImage A, B - один под другим(А - фон(картинка), В - пустой для рисования).
Хочу спросить всех: можно ли как нибудь рисовать в <В> так, что бы при этом сохранялась картинка в <А>?

Суть в том, чтобы <В> использовать как слой(типа как в Photoshop-е, Flash-е и т.д.)

А может это делается совсем другими вещами? Подскажите пожалуйста.
317
09 марта 2005 года
Relax
573 / / 20.09.2000
нелохо бы услышать саму задачу... что вообще надо сделать... если надо сделать отрисовку на экране без мерцания изменяющейся картинки, то надо юзать буфер... т.е. есть у тебя, например, картинка в памяти-фон (объект класса TBitmap), есть еще одна картинка, то что должно быть на экране (тоже объект класса TBitmap)... сначала копируешь первую каритнку (фон) на вторую, потом рисуешь только на второй все свой объекты в нужной последовательности, потом переносишь полученную картинку на экран - попросту рисуешь на канву, например, TPaintBox... теперь что-то происходит, либо действия пользователя, либо просто время проходит - картинка должна измениться... проделываешь все сначала, но уже с другим полоэжением объектов или что там... :))) на экране видишь смену одного каджра другим без мерцания, которое обычно вызвано затиранием фона... если точно знать задачу могу привести пример исходника...
259
09 марта 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Alekc
Всем привет!

Имеется два 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.

6.1K
09 марта 2005 года
Alekc
38 / / 23.12.2004
Цитата:
Originally posted by Relax
нелохо бы услышать саму задачу... что вообще надо сделать...



Извиняюсь за неясность, уточню.

Моя задача похожа на рисование часов: есть картинка-фон(циферблат) - она не меняется. И на этом циферблате должны отображаться стрелочки, но простое рисование стрелочек (нарисовал цветом А, сместил координаты - нарисовал цветом фона) на канве имейджа (где стрелочки) затирает фон.
Я пытаюсь установить некий цвет как прозрачный - но все равно рисование затирает фон.

259
09 марта 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Alekc


Извиняюсь за неясность, уточню.

Моя задача похожа на рисование часов: есть картинка-фон(циферблат) - она не меняется. И на этом циферблате должны отображаться стрелочки, но простое рисование стрелочек (нарисовал цветом А, сместил координаты - нарисовал цветом фона) на канве имейджа (где стрелочки) затирает фон.
Я пытаюсь установить некий цвет как прозрачный - но все равно рисование затирает фон.


Поэкспериментируй со свойством CopyMode

259
09 марта 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by AlexandrVSmirno

Поэкспериментируй со свойством CopyMode


ImageB->Transparent = true решает проблему. Я уже это предлагал.

6.1K
10 марта 2005 года
Alekc
38 / / 23.12.2004
Цитата:
Originally posted by AlexandrVSmirno

ImageB->Transparent = true решает проблему. Я уже это предлагал.



Спасибо, попробую.

2.0K
05 апреля 2005 года
WidowMaker
212 / / 05.04.2005
код примитивный но показывает общую идею
 
Код:
#define _FlipImage_XY(target,source,x,y) target->Canvas->CopyMode=cmSrcCopy; target->Canvas->CopyRect(Rect(x,y,x+source->Width,y+source->Height),source->Canvas,Rect(0,0,source->Width,source->Height));
#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));

.................
 
Код:
void MakeMask(TCanvas *Canv,int width,int height,TColor FillCl,TColor BorderCl)
{
  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));
}

........................
 
Код:
void XPutImage(){
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);}

........
 
Код:
XAnimate(Player);// смена времени
 _FlipImage_XY(MainForm->MainImage,MainForm->ZImage,0,0);
469
05 апреля 2005 года
Sli
71 / / 20.01.2000
Я боролся с мерцанием выставлением BrashStyle = bsClear;
получалось :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог