Grafikdaten für den CPC6128 aufarbeiten...
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Grafikdaten für den CPC6128 aufarbeiten...
Ich möchte ein s/w-Bild in der Grösse 320*200 Byteweise abspeichern.
Dieses Format hat auch der CPC6128.
Bloss der Bildschirmaufbau beim CPC ist nicht Zeilenweise untereinander.
Wenn ich die ersten 80Byte einlese, wird die nächste Zeile ab dem 81. Byte 8 Pixelzeilen tiefer angefangen.
Wenn ich unten rechts angekommen bin , fängt der Grafikaufbau bei der 2. Zeile oben links an, so geht es weiter bis zur 8. Zeile.
Wie kann man jetzt die Daten oben abspeichern, das diese Byte einfach nur vom CPC eingelesen werden und ausgegeben werden.
Irgendwie finde ich für Purebasic den Weg nicht.
Gruss
Dieses Format hat auch der CPC6128.
Bloss der Bildschirmaufbau beim CPC ist nicht Zeilenweise untereinander.
Wenn ich die ersten 80Byte einlese, wird die nächste Zeile ab dem 81. Byte 8 Pixelzeilen tiefer angefangen.
Wenn ich unten rechts angekommen bin , fängt der Grafikaufbau bei der 2. Zeile oben links an, so geht es weiter bis zur 8. Zeile.
Wie kann man jetzt die Daten oben abspeichern, das diese Byte einfach nur vom CPC eingelesen werden und ausgegeben werden.
Irgendwie finde ich für Purebasic den Weg nicht.
Gruss
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Grafikdaten für den CPC6128 aufarbeiten...
die Reihenfolge ist simpel eine Frage der Schleifenschachtelung.
Pseudocode:
ob die Ausrichtung der 8 bits so richtigrum ist, oder ob du sie umdrehen musst, musst du ausprobieren.
ist halt die Frage, ob das erste Pixel durch die 128 oder durch die 1 repräsentiert wird.
so wie's oben steht ist die 128 links, so ist das eigentlich üblich.
aber ob es genügt, die RAW Daten in der richtigen Reihenfolge hintereinander zu packen, damit der CPC sie lesen kann, ist eben die Frage.
wenn du die als ein File speichern willst, wirst du auch noch einen Header benötigen.
Pseudocode:
Code: Alles auswählen
For Staffel = 0 To 7
For Linie = 0 To 24
For ByteStueck = 0 To 79
ByteInhalt = 0
For EinzelBit = 0 To 7
If Point( ByteStueck * 8 + 7 - Einzelbit , Linie * 8 + Staffel )
ByteInhalt + 2 ^ Einzelbit
EndIf
Next
Output( ByteInhalt )
Next
Next
Nextist halt die Frage, ob das erste Pixel durch die 128 oder durch die 1 repräsentiert wird.
so wie's oben steht ist die 128 links, so ist das eigentlich üblich.
aber ob es genügt, die RAW Daten in der richtigen Reihenfolge hintereinander zu packen, damit der CPC sie lesen kann, ist eben die Frage.
wenn du die als ein File speichern willst, wirst du auch noch einen Header benötigen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grafikdaten für den CPC6128 aufarbeiten...
Jup, danke.
Gruss
Es werden die Daten der Reihenfolge nach eingelesen. Wenn er das 81.Byte einliest, dann wird es 8Pixelreihen tiefer ganz links gesetzt und dann geht es daneben wieder weiter...aber ob es genügt, die RAW Daten in der richtigen Reihenfolge hintereinander zu packen, damit der CPC sie lesen kann, ist eben die Frage.
Gruss
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grafikdaten für den CPC6128 aufarbeiten...
Code: Alles auswählen
ByteInhalt + 2 ^ Einzelbit
Gruss
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Grafikdaten für den CPC6128 aufarbeiten...
Code: Alles auswählen
ByteInhalt + ( 1 << Einzelbit )man beschreibt das eben als "zwei hoch bitstelle", aber in PB gibt es nur eine Pow-Funktion für Floats, die ist hier unangebracht, deswegen Bitshift verwenden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grafikdaten für den CPC6128 aufarbeiten...
Jup, jetzt funktioniert es. Ich kann das Bild direkt im Mode 2 einlesen (s/w-Bild) beim Cpc6128.
BmpBild 320x200 2Farbig wird einlesen und als Bin-Datei ausgegeben.
Man muss am ende des Bildschirm immer 48 Byte dazusetzen weil die Bildzeile bis 2048 zählt, also 25*80+48.
Jup , Danke.
Gruss
BmpBild 320x200 2Farbig wird einlesen und als Bin-Datei ausgegeben.
Man muss am ende des Bildschirm immer 48 Byte dazusetzen weil die Bildzeile bis 2048 zählt, also 25*80+48.
Jup , Danke.
Gruss
Code: Alles auswählen
Global ByteInhalt.c,Staffel.l,Linie.l,ByteStueck.l,EinzelBit.l,zz.l
InitSprite()
OpenWindow(0,0,0,800,600,"cpctest",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),10,10,700,400,0,0,0)
OpenConsole()
ClearScreen(RGB(255,255,0))
LoadSprite(0, "cpctest.bmp", #PB_Sprite_Texture)
DisplaySprite(0,0,0)
Repeat
Event.l = WindowEvent()
If GetAsyncKeyState_(#VK_Q)
If CreateFile(0, "byte.bin")
PrintN("es gehtlos..")
StartDrawing(SpriteOutput(0))
For Staffel = 0 To 7
For Linie = 0 To 24
For ByteStueck = 0 To 79
ByteInhalt = 0
For EinzelBit = 0 To 7
If Point( ByteStueck * 8 + 7 - Einzelbit , Linie * 8 + Staffel )
ByteInhalt + ( 1 << Einzelbit )
EndIf
Next
WriteCharacter(0, ByteInhalt)
Next
Next
ByteInhalt=0
For zz=0 To 47
WriteCharacter(0, Byteinhalt)
Next
Next
EndIf
StopDrawing()
CloseFile(0)
PrintN("fertig...")
EndIf
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
Re: Grafikdaten für den CPC6128 aufarbeiten...
Sowas hatte ich auch schon in meinem Retro-X verwendet, allerdings ist da ein kompletter Konverter dran, der nicht nur die CPC, sondern auch einige C64, Spectrum, Amiga usw. Modes beherrscht. Die Retro-Computer Bildformate sind faszinierend, vor allem aber kompliziert.
PB 4.61Beta1 32/64Bit. AMD FX6100, 8 GB RAM, ATI Radeon 5750, Win7 64 (64 bit ist mist weil 16-Bit Programme wie MakeTZX nicht mehr darauf funktionieren).
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Grafikdaten für den CPC6128 aufarbeiten...
Zuviel da drin ist ungesund.ist da ein kompletter Konverter dran, der nicht nur die CPC, sondern auch einige C64, Spectrum, Amiga usw. Modes beherrscht.
Ich mag das nicht wenn das Programm so zugemüllt wird.
Der für den CPC und CPC+ ist auch so vollgemüllt.ConvImgCpc
Darum habe ich meinen eigenen.
Gruss