Transparent und TBitMap

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Lazbridge ist nicht gerade für Animation gedacht, aber man kann OpBitmaps auch sehr schnell auf den Canvas zeichnen. Musst dir halt was einfallen lassen ;-)

z.B. für Windows:

Code: Alles auswählen

procedure DrawRGB32Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, SrcWidth,
  SrcHeight: Integer; Bitmap: TCanvasOPBitmap);
var
  Info: BITMAPINFO;
begin
  with Info.bmiHeader do
  begin
    biSize := SizeOf(BITMAPINFOHEADER);
    biWidth := Bitmap.Width;
    biHeight := Bitmap.Height;
    biPlanes := 1;
    biBitCount := 32;
    biCompression := BI_RGB;
    biSizeImage := 0;
    biClrImportant := 0;
  end;
 
  SetStretchBltMode(Dest, COLORONCOLOR);
  StretchDIBits(Dest, DstX, Pred(DstY + SrcHeight), SrcWidth, -SrcHeight,
    SrcX, SrcY, SrcWidth, SrcHeight, Bitmap.ScanLine[0], Info, DIB_RGB_COLORS, SRCCOPY);
end;
Oder für die GTKs:

Code: Alles auswählen

procedure DrawRGB32Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, SrcWidth,
  SrcHeight: Integer; Bitmap: TCanvasOPBitmap);
var
  P: TPoint;
begin
  P := TGtkDeviceContext(Dest).Offset;
  Inc(DstX, P.X);
  Inc(DstY, P.Y);
  gdk_draw_rgb_32_image(TGtkDeviceContext(Dest).Drawable, TGtkDeviceContext(Dest).GC,
    DstX, DstY, SrcWidth, SrcHeight, GDK_RGB_DITHER_NONE,
    Pguchar(Bitmap.ScanLine[0]),
    Bitmap.Data.LineLength);
end;
 
initialization
  gdk_rgb_init;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Man kann mit TCanvas flackerfrei arbeiten, was will man denn noch mehr ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:was will man denn noch mehr ?
Keine Ahnung was Pluto will, ich beantworte nur seine Fragen und Bemerkungen.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Anmationen wollte ich noch gar nicht verwenden.
ich weiß Christian den Trick habe ich schon rauß*G*

Habe mir sogar eine kleine Engine dazu geschrieben....

Heute oder Morgen werde ich hier mal den Pacman Clone veröffentlichen der diese Engine nutzt... das Prinzip ist ganz einfach....

Mir reicht Canvas und OpBitMap voll und ganz aus *FREU*....

Später wenn ich ein neuen Rechner habe kann ich mal OpenGL antesten..... und gut ist...

Ich finde Canvas reicht für einfache 2D Spiele wie halt:
Pacman, Bomberman(habe ich noch nie geschrieben), Breakout, Snake, Tetris(auch noch nie)...
kennt ihr noch mehr ?) diese Astroiden Spiele evlt. auch...

Ich finde es immer übertrieben, wenn ein einfaches 2D Spiel gleich 100% CPU last braucht.. ich habe ein Pacman clone gesehen, noch einfacher und bilger als meiner, der hat 100% CPU last benötigt, ist natürlich einfacher, aber nicht besser.... oder ?

Bei 3D Spielen sehe ich das noch ein... oder bei aufwendigeren Spielen wie clonk oder so.....
Bei 2D meine ich auch wirkliches 2D und keine Iso 2D oder so....

Christian du hast doch gesagt das du auch 2D Spiele geschrieben hast, richtig ?
Was waren das für welche ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ne 2D hab ich noch net gemacht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

? Dann war es drei D... naja wie auch immer....
MFG
Michael Springwald

Antworten