Entwickler-Ecke

Multimedia / Grafik - msimg32.dll->TransparentBlt ignoriert Src-Koordinate


DerKrasseHans - Fr 21.03.03 23:33
Titel: msimg32.dll->TransparentBlt ignoriert Src-Koordinate
ich hab die Routine TransparentBlt aus der msimg32.dll durch folgende Deklaration in mein Projekt integriert:

Quelltext
1:
function TransparentBlt( ... ): Boolean; stdcall; exports 'msimg32.dll' name 'TransparentBlt';                    

Die Routine blittet schon schön transparent das is kein Problem; nur wird immer (unabhängig welche Werte ich für nXOrignSrc und nYOrignSrc eingebe) nur der Bereich ab (0, 0) der Quellbitmap kopiert, jeodch kann ich die Verschiebung nicht selbst definieren...


Andreas Pfau - Sa 22.03.03 14:17

So ist es in meiner Version deklariert:

Quelltext
1:
function TransparentBlt(DC: HDC; p2, p3, p4, p5: Integer; DC6: HDC; p7, p8, p9, p10: Integer; p11: UINT): BOOL; stdcall; external msimg32 name 'TransparentBlt';                    


DerKrasseHans - Sa 22.03.03 18:46

erstmal: danke für rückmeldung,
aber die deklaration war nich mein problem, die werd ich wohl richtig haben, da ich die Prozedur ohne Fehlermeldung aufrufen kann:

Quelltext
1:
function TransparentBlt (hdcDst: HDC; DstX, DstY, DstWidth, DstHeight: Integer; hdcSrc: HDC; SrcX, SrcY, SrcWidth, SrcHeight: Integer; crTransparent: TColor): Boolean; stdcall; exports 'msimg32.dll' name 'TransparentBlt';                    

Mein Problem ist folgendes:
ich möchte aus einer SrcBitmap (hdcSrc), in der sich mehrere Animationsbilder eines animierten Sprites befinden, erst ab einer bestimmten Position (SrcX, SrcY) blitten, nämlich ab dort, wo sich das Animationsbild befindet, aber irgendwie blittet die Funktion IMMER ab der Position (0, 0), egal was ich für SrcX und SrcY übergebe.


Andreas Pfau - Sa 22.03.03 19:04

Also, XSrc und YSrc geben nicht an, wo das ganze hingerendert wird, sondern welcher Quell-Bitmap-Ausschnitt gerendert werden soll.

Ich fasse mal zusammen: du renderst Bitmap A auf B. B soll bei X, Y gerendert werden. Das legst du nicht mit SrcX und SrcY fest sondern mit DstX/Y.

Villeicht liegt das Prob auch wo anders und ich habe dich falsch verstanden. Ich habe diese Menthode noch nie verwendet, musst du wissen. Aber die wird ja genauso wie BitBlt/StretchBlt verwendet, also müsste mein Wissen hier ausreichen.


DerKrasseHans - Mi 26.03.03 19:47

Jo dass es um den Ausschnitt der Quellbitmap geht war mir auch klar, mein Problem ist auch derart abstrus, dass es wahrscheinlich einfach nicht zu verstehen ist. Was aber auch völlig egal ist, weil es sich jetzt wie von geisterhand in Luft aufgelöst hat.
Es ging darum, dass ich zwar einen Quellauschnitt über SrcX und SrcY angegeben habe, dieser Auschnitt jedoch von der Routine TransparentBlt() vollkommen ignoriert wurde und die Werte für SrcX und SrcY immer auf (0, 0) gesetzt wurden.
Ich hab das Ganze jetzt bei einem Freund mal laufen lassen, und er meinte, dass mein Prog einwandfrei funktionierte.... ergo: meine msimg32.dll war im *popo*!!! Ich hab sie einfach mal neu drüber-kopiert und schwupps, es ging.... Also falls irgendjemand dasselbe Prob mit der (im Grunde derben Routine) TransparentBlt() hat, einfach neu installieren.
Grüße
Paul.