GDI+: Bitmap in Bitmap zeichnen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

GDI+: Bitmap in Bitmap zeichnen

Beitrag von Hoto »

Ich lade mit GdipCreateBitmapFromFile() 2 Image Dateien, einen Hintergrundlayer, einen Vordergrundlayer und dazwischen ein Layer mit unterschiedlichem Inhalt, den ich mit der LoadImage_() reinladen muss. Die 3 Images zusammen ergeben 1 Image, dass dann vom Programm benutzt wird. Wie kriege ich das nun hin das alles zu einem Image zusammen zu kopieren? Gibt es da mit GDI+ selbst direkt eine Möglichkeit? Wie würdet ihr das machen? Probier da schon etwas rum, aber irgendwie will das nicht so recht klappen (besonders der Layer dazwischen).
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Code: Alles auswählen

;halber speudocode
;intialisiere GDI+ zeug
;lade bilder...
WImage.l=CreateImage(#PB_Any,Width.l,Height.l,32)
hdc = StartDrawing(ImageOutput(*in\window\WImage.l))
   GdipCreateFromHDC( hdc, @*gfx )
   Resultat.l = GdipDrawImage(*graphics, *image, x.f, y.f) 
StopDrawing()
größeres bsp:
http://marv.sceneproject.org/stuff/player.zip

hoffe das meintest du
Gruß Marvin
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Ne, da wird ja wieder in ein PB Image gezeichnet.

Das Problem bei CreateImage ist, dass man kein wirklich leeres Bild hat in das man zeichnet, denn es ist direkt ein schwarzes Bild.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

was soll denn ein "leeres" bild sein?

erstmal brauchst du einen speicherbereich einer gewissen größe,
damit überhaupt ein bild vorhanden ist.
und wenn speicherbereich geleert wird, schreibt man ne #Null rein.
außerdem ist das die standardmäßige "transparente" Hintergrundfarbe.
also, leerer kann ein Bild nicht sein aufm Computer.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Würde die Alphatransparenz richtig unterstützt, wäre ein leeres Bild ein leeres Bild und kein schwarzes Bild, also 100% transparent. Und ich rede sicherlich nicht von der Einfarbtransparenz.

Mit Alphakanal sähe ein leeres Bild so aus, dass jeder Pixel auf ARGB 0,0,0,0 gesetzt ist, also Schwarz mit 0 Deckkraft, weswegen Schwarz eigentlich ignoriert werden kann, könnte auch 0,255,255,255 sein und man hätte das gleiche Resultat.

Fände es eben etwas umständlich erst alles in ein pb image zusammen zu kopieren und dann wieder in ein gdi+ bitmap umzuwandeln, weil als solches brauch ich es dann um es später anzuzeigen.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

@Hoto
Du hast doch das gesammte GDI+ zeugs runtergeladen oder?
wenn ja... schau dir mal die Hilfe dazu an..

Zudem.. mein beispiel welches ich noch im ersten post hinzugefügt hatte, zeigt deutlich das es egal ist ob das IMG mit pb erstellt wird oder nicht. die transparenz (im erweiterten bsp die ecken) ist trotzdem da..

nunja wurst, hier noch ein paar Empfehlungen:
Gdiplus_StartDrawing() + Gdiplus_StopDrawing()
schau dir auch alle GdiplusCreate befehle an.. vll findest du dann was..
hoffe das hilft
gruß marvin

Edit:
noch ne möglichkeit ist einfach ein komplet transparentes PNG mit 1*1 pixel in dein Programm zu integrieren. Dieses kannst du dann beliebig verzerren und damit transparente bereiche auf von PB erstellen bildern bekommen.
Antworten