Aktuelle Zeit: 28.02.2020 01:48

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bild wird nicht richtig erstellt für den Vic20.
BeitragVerfasst: 31.12.2019 16:27 
Offline

Registriert: 31.12.2009 11:58
Hallo, guten Tag.

Ich möchte bitte eine Grafik 176x176 Pixel umwandeln in eine Bin-Datei für den Vic20.
Es klappt mit meiner Berechnung nicht.
Das Bild ist bei jeder Zeile verschoben , das rechte Bit im Byte fängt links an und umgekehrt.
Auch die letzten Zeilen sind verschoben und passen nicht in den Screen 176x176.

Der Screen vom Vic20 ist so aufgeteilt.
- das 1. Char ist links oben und 16 Byte hoch und 1 Byte breit. in einer reihe sind 22 solcher chars.
- es sind 11 char-reihen untereinander . in jeder neuen reihe fangen die chars wieder links an.

Ich habe 3872 Byte ausgerechnet : 22x16x11
Meine Bin-datei hat 3872 Byte.

Wer kann bitte einmal helfen.
Komme damit nicht zurecht : Procedure speicher_bild()

Hier kann man das Bild sehen:
http://sleepingelephant.com/ipw-web/bul ... f=2&t=9555

Danke.
Gruss

Code:
Global ByteInhalt.a,Linie.l,ByteStueck.l,EinzelBit.l,yy.l,bild.l,geladen.l
Global text1.s,text2.s,farbe.l,xline.l,yline.l,x.l,y.l

Declare lade_bild()
Declare speicher_bild()

Enumeration
  #Window_0
  #Button_0
  #Button_1
  #String_0
EndEnumeration

InitSprite()
InitKeyboard()

OpenWindow(#Window_0,780,600,500,220,"vi20 hires", #PB_Window_SystemMenu)

ButtonGadget(#Button_0, 10,10, 80, 25, "Bild laden")
ButtonGadget(#Button_1, 10,35, 80, 25, "Bild erstellen")
StringGadget(#String_0, 10, 100, 100, 20, "")

CreateImage(0, 176,176)
StartDrawing(ImageOutput(0))
Box(0,0,176,176, RGB(255,255,255))
StopDrawing()

ImageGadget(0, 160, 10, 0, 0, ImageID(0))

Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
     
      If EventGadget = #Button_0
        Pattern$ = "Text (*.bin;*.bmp)"
        Pattern = 0   
        text1 = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)
        text1=GetFilePart(text1)
        SetGadgetText(#string_0, text1)
        lade_bild()
      EndIf
     
      If EventGadget = #Button_1
        speicher_bild()
      EndIf
     
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
 
ForEver

Procedure speicher_bild()
  If text1=""
    Goto weiter
  EndIf
 
  text1=Left(text1,Len(text1)-4)
 
  CreateFile(0, "d:\winvice\bilder\"+text1+".bin")
 
  StartDrawing(ImageOutput(0))
  For yline=0 To 175 Step 16
    For xline=0 To 175 Step 8
      ByteInhalt = 0
      For y=yline To yline+15
        For x=xline To xline+7
          farbe=Point(x,y)
          If (farbe <> 0)
            ByteInhalt | (1 << (x%8))
          EndIf
          If (x % 8 = 7)
            WriteByte(0, ByteInhalt)
            ByteInhalt = 0
          EndIf
        Next
      Next
    Next
  Next
 
  StopDrawing()
  CloseFile(0)
 
  SetGadgetText(#string_0, "gespeichert")
  weiter:
  text1=""
EndProcedure

Procedure lade_bild()
  LoadImage(1,"d:\winvice\bilder\"+text1)
  StartDrawing(ImageOutput(0))
  DrawImage(ImageID(1), 0,0)
  StopDrawing()
  ImageGadget(0, 160, 10, 0, 0, ImageID(0))
EndProcedure



Gruss


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild wird nicht richtig erstellt für den Vic20.
BeitragVerfasst: 31.12.2019 19:14 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Schönen Abend,
soweit ich mich erinnere beherrscht der VC20 und ebenso der C64 kein Zeilensprung Verfahren.
Damit fehlt geht dem Commodore 1 Zeile (624 statt wie bei PAL üblich 625 Zeilen).
Die Pal Fernseher werden mit so einem Signal "fertig" und können das sauber darstellen.
Du erzeugst eine Bitmap mit 176x176 Pixel, ich glaube das ist auch nicht die richtige Grösse...
Zusätzlich müssen in das Bild noch die Sync Informationen mit rein, sehr wahrscheinlich ist
deshalb dein Bild bei der Darstellung verschoben.
Schau dir doch mal den Aufbau eines VC20 Bildes in einen Hexeditor an...
Hab hier leider kein Commodore Buch mehr rumliegen, aber da würd ich erst mal ansetzen.
Vielleich kann dir jemand aus dem C64 Forum einen Tip geben, der Link dazu ist:
https://www.forum64.de/index.php?board/15-vc20/

Schöne Grüsse
Kurt

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild wird nicht richtig erstellt für den Vic20.
BeitragVerfasst: 01.01.2020 12:41 
Offline

Registriert: 31.12.2009 11:58
Hallo, guten Tag.

Den Vic20 kann man in den Grafikmodus versetzen.
dann hat er 22 Chars in einer Reihe und 11 Chars senkrecht.
Senkrecht haben die Chars dann 16 Byte.
Wenn ich dann A und B reinschreibe erscheinen die Untereinander weil die Chars nur 8 Byte hoch sind.
Ich liege da richtig 16x22x11.

Die Grafik wird wie beim C64 gesetzt, nur das es hier 16 Byte untereinander sind und nur 22 nebeneinander.

Vielleicht kannst du mir die für 8 Byte untereinander mal herstellen bzw für den C64 Screen..
Das Prinzip zu den 16 ist dann nicht schwer für mich.

Ich verstehe die Sache mit den Bit setzen nicht damit 1 Byte voll wird von links nach rechts.

danke.
Gruss


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild wird nicht richtig erstellt für den Vic20.
BeitragVerfasst: 01.01.2020 14:38 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Guten Morgen,

ein Bit wird gesetzt, indem man ein Byte mit einem bestimmten Wert ODER verknüpft.

Ein Beispiel: das ursprüngliche Byte ist $00 (binär 00000000) und es soll das 4. Bit gesetzt werden.
Dazu muss das Byte mit $08 (binär 00001000) ODER verknüpft werden.
In 6502 Assembler gibt es dazu den Maschinenbefehl ORA (ODERE den Akkuinhalt)

LDA #$ 00 Lade Akku mit 00000000
ORA #$ 08 odere den Akkuinhalt mit 00001000 (4. Bit Zählweise beginnt immer rechts)
Im Akku steht jetzt 00001000 (STA... store Akku)

Ein weiteres Beispiel:
LDA #$ 47 Lade Akku mit 01000111
ORA #$ 08 odere mit 00001000 (4. Bit setzen)
damit steht im Akku 01001111 also $4F

Willst du bei den Beispielen Bit 5 setzen, müsstest du mit $10 also 00010000 ODERN

Um ein Bit zu löschen geht man wie folgt vor:

Beispiel:
LDA #$ 4F Lade Akku mit 01001111
AND #$ 47 UNDiere mit 01000111 (Bit 4 ist 0 also löschen)

Für ODER gilt : 1 oder 1 = 1 sowie 1 oder 0 = 1 sowie 0 oder 0 = 0
Für UND gilt: 1 und 1 = 1 sowie 0 und 1 = 0

Hab mich noch nicht damit befasst, aber die binären Verknüpfungen gibt es sicher auch in Purebasic und die Vorgehensweise ist die gleiche.


Schöne Grüsse
Kurt

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild wird nicht richtig erstellt für den Vic20.
BeitragVerfasst: 03.01.2020 11:11 
Offline

Registriert: 31.12.2009 11:58
Danke für die Info.


Gruss


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye