Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

как сделать прозрачный pbitmap? Маска и DrawTransparent работают   Найти похожие ветки 

 
Dy1 ©   (2007-03-09 20:46) [0]

нужно нарисовать спрайт, растянув с заданным коэффициентом

uses
 Windows, Messages, KOL, FastMM, JpegObj;

var
 F: PControl;
 timer: PMMTimer;
 back: PJpeg;
 airp, restore, mask: PBitmap;
 restoreR, backR, airpR: TRect;
 fps,fp, speed: cardinal;
 koef: double;
//================================
procedure ResLoader;
var
 p: PStream;
 k: integer;
begin
 p := NewMemoryStream;
// фон pjpeg
 k := Resource2Stream(p, hInstance, "back", RT_RCDATA);
 if k = 0 Then
   Applet.Close;
 p.Position := 0;
  back := NewJpeg;
  back.LoadFromStream(p);
 if back.Empty Then
   Applet.Close;
 p.Size := 0;
koef := F.ClientHeight / back.Height;
 backR.Left := 0;
 backR.Top := 0;
 backR.Right := F.ClientWidth;
 backR.Bottom := F.ClientHeight;

// самолёт pbitmap
 k := Resource2Stream(p, hInstance, "s", RT_RCDATA);
 if k = 0 Then
   Applet.Close;
 p.Position := 0;
  airp := NewBitmap(150,150);
  airp.LoadFromStreamEx(p);
 if airp.Empty Then
   Applet.Close;

// восстановление фона pbitmap
 restore := NewBitmap(airp.Width, airp.Height);

// создаём маску
 mask := NewBitmap(airp.Width, airp.Height);
 mask := airp;
 mask.Convert2Mask(clWhite); // неправильно понимает цвет. Фон картинки именно белый

 p.Free;
end;
//==========
Procedure ScrClose(Sender: PObj; var Accept: Boolean);
begin
 timer.Enabled := False;
 back.Free;
 airp.Free;
 mask.Free;
 restore.Free;
end;
//------------------------------------------------------------------------------
Procedure ScrErase(Sender: PControl; DC: HDC);
begin end;
//------------------------------------------------------------------------------
Procedure Paint(Dummy: Pointer; Sender: PControl; DC: HDC);
begin
 if back.Empty Then
   Exit;
 back.StretchDraw(F.Canvas.Handle, backR);
    airp.DrawMasked(F.Canvas.Handle, 100,100, mask.Handle);
//  airp.DrawTransparent(F.Canvas.Handle, 100,100, clWhite);

 fps := fps + 1;
 if(timer.Interval * timer.Tag) > 998 Then
 begin
   fp := fps;
   timer.Tag := 0;
   fps := 0;
 end;
 F.Canvas.TextOut(5,5,int2str(fp));
end;
//------------------------------------------------------------------------------
Procedure OnTimer(Dummy: Pointer; Sender: PMMTimer);
begin
 timer.Tag := timer.Tag +1;
 F.Invalidate;
end;
//==================
procedure Scr;
begin
 F := NewForm(Applet, "WingRR");
 F.Style := WS_POPUP or WS_MAXIMIZE or WS_VISIBLE; // None
 F.OnPaint := TOnPaint( MakeMethod(nil, @Paint));
 F.OnClose := TOnEventAccept(MakeMethod(nil, @ScrClose));
 F.OnEraseBkgnd := TOnPaint( MakeMethod(nil, @ScrErase));

 F.Canvas.Font.Color := clRed;
 F.Canvas.Font.FontHeight := F.ClientHeight shr 5;
 F.Canvas.Brush.BrushStyle := bsClear;

 ResLoader;

 timer := NewMMTimer(Speed); // ~5 ms
 timer.Resolution := 1;
 timer.OnTimer := TOnEvent( MakeMethod( nil, @OnTimer));
 timer.Enabled := True;
 Run(F);
end;
//===================
begin
 Install_FastMM;
 Scr;
end.


 
имя   (2007-03-21 17:46) [1]

Удалено модератором


 
Vladimir Kladov   (2007-03-21 19:07) [2]

версия какая


 
Dy1 ©   (2007-03-23 22:50) [3]

2.37  Единственная работающая у меня версия.
Сейчас сделал маску вручную.
На некоторых компах самолёт дёргается (прога ужЕ давно написана). Не пойму что тормозит. Либо таймер, либо очередное паранормальное явление :(


 
имя   (2007-03-24 02:44) [4]

Удалено модератором


 
Vladimir Kladov   (2007-03-24 10:44) [5]

Формат картинки, случаем, не pf8bit. Исправление было в 2.54.


 
имя   (2007-03-25 05:35) [6]

Удалено модератором


 
имя   (2007-03-25 18:24) [7]

Удалено модератором


 
Galkov ©   (2007-03-25 18:39) [8]

Что-то я совсем перестал понимать логику работы модера в этой конференции.

если это а) работа б) логика


 
имя   (2007-03-27 08:28) [9]

Удалено модератором


 
имя   (2007-03-27 08:28) [10]

Удалено модератором


 
имя   (2007-04-27 03:34) [11]

Удалено модератором


 
имя   (2007-04-27 03:36) [12]

Удалено модератором


 
имя   (2007-04-28 07:04) [13]

Удалено модератором


 
имя   (2007-05-07 23:01) [14]

Удалено модератором


 
имя   (2007-05-08 07:32) [15]

Удалено модератором


 
имя   (2007-05-14 02:08) [16]

Удалено модератором


 
имя   (2007-05-14 14:33) [17]

Удалено модератором


 
ANTPro ©   (2007-05-14 17:46) [18]

А не проще ветку закрыть? : )



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
15-1194168401
savyhinst
2007-11-04 12:26
2007.12.02
Угол по ф.


2-1194441116
..::KraN::..
2007-11-07 16:11
2007.12.02
Как перевести компьютер в спящий режим


2-1193895287
vegarulez
2007-11-01 08:34
2007.12.02
Вопрос про PGP


15-1194178514
andreoman
2007-11-04 15:15
2007.12.02
как читать чужиее смс


2-1194343616
Sergl
2007-11-06 13:06
2007.12.02
Номер коннекта в сокетах