 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 08.02.2009, 13:30 Titel: Frage zu Put |
|
|
Hallo!
Ich möchte ein Bild mit Transparenz auf dem Bildschirm zeichnen und habe bemerkt, das dass mit Put nicht geht, oder muss ich da noch irgendwelche Attribute setzen? Ich habe deshalb meine eigene Funktion geschrieben. Mit dieser Funktion geht es, aber die ist natürlich langsamer als Put...
Könnt ihr mir vielleicht helfen?
Code: | Declare Function GetPixel(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer) As UInteger
Declare Sub SetPixel(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer, ByVal Value As UInteger)
Declare Sub DrawImage(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer)
Dim Image As Any Pointer
ScreenRes 500, 300, 32, , &H40
Image = ImageCreate(160, 160, RGB(0, 0, 0))
' Hintergrund malen
For x As Integer = 0 To 799
For y As Integer = 0 To 599
If x Mod 2 = 0 And y Mod 2 = 0 Then
PSet(x, y), RGB(255, 255, 255)
EndIf
Next
Next
' Transparente Box in das Bild zeichnen
For x As Integer = 20 To 140
For y As Integer = 20 To 140
SetPixel(Image, x, y, RGBA(0, 255, 0, 127))
Next
Next
Line(80, 60)-(405, 70), RGBA(0, 0, 0, 128), BF
Draw String(100, 62), "Eigene Funktion"
Draw String(272, 62), "Put Funktion"
'Bild zeichnen
DrawImage(Image, 80, 80) 'einmal mit der eigenen Funktion
Put(245, 80), Image, PSet 'einmal mit Put
GetKey()
ImageDestroy(Image)
Sub SetPixel(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer, ByVal Value As UInteger)
Dim ImageWidth As Integer
ImageInfo(Buffer, ImageWidth)
Cast(UInteger Pointer, Buffer)[(Y * ImageWidth) + X + 8] = Value
End Sub
Function GetPixel(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer) As UInteger
Dim ImageWidth As Integer
ImageInfo(Buffer, ImageWidth)
Return Cast(UInteger Pointer, Buffer)[(X * ImageWidth) + Y + 8]
End Function
Sub DrawImage(ByVal Buffer As Any Pointer, ByVal X As Integer, ByVal Y As Integer)
Dim ImageWidth As Integer
Dim ImageHeight As Integer
ImageInfo(Buffer, ImageWidth, ImageHeight)
For bx As Integer = 0 To ImageWidth - 1
For by As Integer = 0 To ImageHeight - 1
PSet(x + bx, y + by), GetPixel(Buffer, bx, by)
Next
Next
End Sub |
|
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 08.02.2009, 14:53 Titel: |
|
|
Code: | Put(245, 80), Image, Alpha | oder Code: | Put(245, 80), Image, Alpha, Transparenzwert |
_________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 08.02.2009, 15:49 Titel: |
|
|
Ja, das weiß ich auch, aber dann ist ja das gesamte Bild transparent. Ich möchte ja, das nur ein Teil transparent ist. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.02.2009, 16:46 Titel: |
|
|
ist es nicht...? irrtum, euer gnaden! du hättest es wenigstens mal probieren sollen, denn der erste befehl von raphael erzeugt ein identisches bild! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|