Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Плавное именение рисунка с одного на другой


Автор: vikaz 5.9.2007, 11:46
Все привет!
Ребята подскажите!
Как можно сделать, чтобы рисунок из одного медленно перетикал в другой? и на какой компоненте это делать image и PaintBox?
Заранее спасибо!

Автор: cyberstream 5.9.2007, 12:42
http://delphi4all.narod.ru/how/transf.htm
Не на С++, но идея ясна ... 

Автор: vikaz 5.9.2007, 13:05
спс, сегодня попробую реализовать!

Автор: vikaz 5.9.2007, 13:21
smile

Автор: vikaz 5.9.2007, 13:59
Возникла проблема с отладкой кода и проблема с PByteArray
в дельфи такой код
p1, p2, p : PByteMap;

я написал так!
PByteArray  p, p1, p2;

потом есть такой код:

for i := 1 to count - 1 do begin
    for y := 0 to bm.Height - 1 do begin
      p := bm.ScanLine[y];
      p1 := bm1.ScanLine[y];
      p2 := bm2.ScanLine[y];
      for x := 0 to bm.Width * 3 - 1 do
        p^[x] := round((p1^[x] * (count - i) + p2^[x] * i) / count);
    end;
    Form1.Canvas.Draw(0, 0, bm);
    Form1.Caption := IntToStr(round(i / count * 100)) + '%';
    Application.ProcessMessages;
    if Application.Terminated then break;
  end;

проблема возникла с сторокой 
p := bm.ScanLine[y];

написал так: p = bm->ScanLine[y];
но компилятор ругается:
[C++ Error] Unit1.cpp(63): E2034 Cannot convert 'void *' to 'unsigned char *'

что я не так определил или сделал?

и как перевести строку: 
p^[x] := round((p1^[x] * (count - i) + p2^[x] * i) / count);

Автор: jonie 5.9.2007, 20:40
http://pascal.sources.ru/demo/morphing.htm
ну и по ссылкам на морфинг поищи 8)

Автор: vikaz 6.9.2007, 07:59
Народ, помогите перевести код!!! :(

Автор: vikaz 6.9.2007, 08:53
Ну все уже не надо! Вот код на с++ под Builder 6
Код

const count = 100;
int i;
int x,y;
Graphics::TBitmap * bm, *bm1,*bm2;
PByteArray  p, p1, p2;
int c;
int k;


 bm = new Graphics::TBitmap();
 bm1 = new Graphics::TBitmap();
 bm2 = new Graphics::TBitmap();
 bm1->LoadFromFile("c:\\1_1.bmp");
 bm2->LoadFromFile("c:\\2_1.bmp");
 if (bm1->Height < bm2->Height)
  {
   bm->Height = bm1->Height;
   bm2->Height = bm1->Height;
  }
  else
   {
    bm->Height = bm2->Height;
    bm1->Height = bm2->Height;
   }

  if (bm1->Width < bm2->Width)
  {
   bm->Width = bm1->Width;
   bm2->Width = bm1->Width;
  }
  else
  {
   bm->Width = bm2->Width;
   bm1->Width = bm2->Width;
  }
  bm->PixelFormat = pf24bit;
  bm1->PixelFormat = pf24bit;
  bm2->PixelFormat = pf24bit;

  Form1->Canvas->Draw(0,0,bm1);
  for (i=1; i<count;i++)
  {
   for (y=0; y<bm->Height; y++)
   {
    p = (PBYTE) bm->ScanLine[y];
    p1 = (PBYTE) bm1->ScanLine[y];
    p2 = (PBYTE) bm2->ScanLine[y];

    for(x=0; x<bm->Width*3; x++)
    {
     p[x] = (int)((p1[x]*(count-i) + p2[x] * i)/count);
    }
   }
   Form1->Canvas->Draw(0,0,bm);
   }
   Form1->Canvas->Draw(0,0,bm2);
   delete bm, bm1, bm2;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)