Probleme mit Pixmap?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Probleme mit Pixmap?

BeitragSo, Mai 08, 2011 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
ich hab noch ein kleines Problem mit meinem Spiel und zwar, habe ich in meinem Spiel mehrere Arrays für die Blöcke und wenn man auf einen der Blöcke klickt, dann habe ich dieser Block in PixMap geschrieben, das funktioniert alles, aber es wird alles in Graustufen angezeigt, also ohne Farbe.
Hier mal der Code:
BlitzMax: [AUSKLAPPEN]
Function NewPixMapBlock(BlockNr:Int)
Pix = CreatePixmap(Block[BlockNr].XAnz*36,Block[BlockNr].YAnz*36,PF_I8)
Local Pixel:Int
For Local y:Int=0 To Block[BlockNr].YAnz-1
For Local x:Int=0 To Block[BlockNr].XAnz-1
Local Wert:Int = Block[BlockNr].arrBlock[x,y].Wert
For Local j:Int=0 Until 36
For Local i:Int=0 Until 36
Pixel = ReadPixel(tmpPix,i+Wert*36,j)
WritePixel(Pix,i+x*36,j+y*36,Pixel)
Next
Next
Next
Next
PixMapAnzeigen = 1
End Function


Und noch eine Frage, wie kann ich das Bild in PixMap um 90 Grad flüssig drehen lassen?
Gibt es Vielleicht in BM eine Funktion die das Bild um 90 Grad drehen kann?

Danke schonmal.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Xeres

Moderator

BeitragSo, Mai 08, 2011 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist unglaublich viel langsamer alles in eine Pixmap zu zeichnen, als einfach Bilder (oder Rect/Plot) zu benutzen.
Dann klappt das Drehen auch schnell & Problemlos mit SetRotation.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

bruce85

BeitragSo, Mai 08, 2011 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber wie soll ich sonst die Blöcke in ein TImage schreiben?
Die Blöcke sind ja in Array gespeichert und von dort aus zeichne ich den momentaner Block in Pixmap um von dort aus eine saubere Drehung hinzubekommen.

Kann man das Bild in Pixmap nicht irgendwie um 90 Grad Drehen, also so wie eine Animation?

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

M0rgenstern

BeitragSo, Mai 08, 2011 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sollst nich die Blöcke in einem TImage speichern, sondern nur die Bilder für die Blöcke.
Wie sind deine Blöcke denn aufgebaut? Soll jeder BLock gleich aussehen? Wenn nein, wie werden sie unterschieden?
Denk mal über diese Fragen nach, vielleicht weißt du dann schon, wie du es mit TIMages lösen kannst.
Pixmaps sind hier wirklich keine Lösung, die sind höchstens gut um Bilder einmalig zu verändern und das veränderte Bild dann als TImage zu benutzen.

Lg, M0rgenstern
 

bruce85

BeitragSo, Mai 08, 2011 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dir.

Ein Block ist z.B. so bei mir im Array gespeichert:
00000
02200
00220
00000

Des sind einfach einzelne Frames die ich über LoadAnimImage geladen habe.
Hier mal ein Bild wie ich es über PixMap gemacht habe:
http://s1.directupload.net/fil...xb_png.htm

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

BladeRunner

Moderator

BeitragSo, Mai 08, 2011 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
es wäre einfacher ein array zu machen und das zu rotieren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

bruce85

BeitragSo, Mai 08, 2011 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ja ein Array indem der Block komplett gespeichert is, hier z.B:
BlitzMax: [AUSKLAPPEN]
Block[nr]...


Ich möchte aber eine Animierte Rotation, also nicht eine Rotation indem der Block von 0 auf 100 gedreht wird.

Ist das eigentlich möglich in BM?

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

BladeRunner

Moderator

BeitragSo, Mai 08, 2011 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, du kannst die Einzelnen Bilder per SetRotation drehen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

M0rgenstern

BeitragSo, Mai 08, 2011 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
bruce85, was genau ist denn in einem Arrayfeld gespeichert?
Also in einem BlitzMax: [AUSKLAPPEN]
block[z]

Ist das ein Array mit INstanzen eines Types oder was genau enthält ein Array Feld?
Wenn wir das wüssten, könnten wir dir wahrscheinlich ein wenig besser helfen.

Allgemein für Schrittweises rotieren:

BlitzMax: [AUSKLAPPEN]
Winkel=(Winkel+1) Mod 360
SetRotation(winkel)
'Zeichnen
SetRotation(0)


Lg, M0rgenstern
 

bruce85

BeitragSo, Mai 08, 2011 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dir.

Ich habe Types genommen für die Anzahl von Blöcken und in diesem Type habe ich ein Array für die Daten der Blöcke.

Ich habe das jetzt hinbekommen, funktioniert bestens.

Hier mal der Code wie ich das gemacht habe:
BlitzMax: [AUSKLAPPEN]
'Blöcke in Image speichern
Function NewPixMapBlock(BlockNr:Int)
BlockImage = CreateImage(Block[BlockNr].XAnz*36,Block[BlockNr].YAnz*36,1,DYNAMICIMAGE|MASKEDIMAGE)
Pix = CreatePixmap(Block[BlockNr].XAnz*36,Block[BlockNr].YAnz*36,PF_I8)
Local Pixel:Int
Pix = LockImage(BlockImage)
For Local y:Int=0 To Block[BlockNr].YAnz-1
For Local x:Int=0 To Block[BlockNr].XAnz-1
Local Wert:Int = Block[BlockNr].arrBlock[x,y].Wert
For Local j:Int=0 Until 36
For Local i:Int=0 Until 36
Pixel = ReadPixel(tmpPix,i+Wert*36,j)
WritePixel(Pix,i+x*35,j+y*35,Pixel)
Next
Next
Next
Next
UnlockImage(BlockImage)
MidHandleImage(BlockImage)
Block[BlockNr].RotierenAnzeigen = 1
End Function


und hier die Rotation:
BlitzMax: [AUSKLAPPEN]
If Block[MerkBlockNr].RotierenAnzeigen = 1 Then
If Block[MerkBlockNr].RotierenZaehler >= 90 Then
Block[MerkBlockNr].RotierenAnzeigen = 0
Block[MerkBlockNr].RotierenZaehler = 0
Block[MerkBlockNr] = turnArray(Block[MerkBlockNr].Nr)
Else
Block[MerkBlockNr].RotierenZaehler = Block[MerkBlockNr].RotierenZaehler + 5.0
Block[MerkBlockNr].Rotieren = (Block[MerkBlockNr].Rotieren + 5.0) Mod 360
EndIf
SetRotation(Block[MerkBlockNr].Rotieren)
DrawImage BlockImage,BlockImagePosX,BlockImagePosY
SetRotation(0)
EndIf


Beim Image sind jetzt die Leere Blöcke in Pink, obwohl ich am anfang SetMaskColor 255,0,255 gesetzt habe.
Wie kann ich das jetzt Transparenz machen?

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

M0rgenstern

BeitragMo, Mai 09, 2011 8:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich ist das Pink in dem BIld nicht 100%ig das 255,0,255 Pink.
Aber am besten lässt du eine Mask-Farbe in Bmax weg.
BMax zeichnet transparente und halbtransparente BIlder ganz von selbst.
Dazu machst du einfach die Stellen, die im BIld transparent sein sollen mit einem Programm wie z.B. GImp transparent.
Dann erledigt sich das Problem ganz von selbst.

Lg, m0rgenstern
 

bruce85

BeitragMo, Mai 09, 2011 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab die Transparente stellen in Photoshop mit dem Zauberstab entfernt und nun ist es Transparenz.

Vielen Dank für die Hilfe.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group