Hallo , guten tag. Warum stimmen die VGA-Linien 0 und 7 nicht mit 320 Farbpunkten? Danke. Gruss ----------------------------------- #include <dos.h> #include <conio.h> #define VIDEO_SEGMENT 0xA000 #define SCREEN_WIDTH 320 void SetTextMode () { _AH = 0; _AL = 0x03; geninterrupt (0x10); } void SetMode13h () { _AH = 0; _AL = 0x13; geninterrupt (0x10); } void PutPixel (int x, int y, unsigned char color) { pokeb (VIDEO_SEGMENT, (y * SCREEN_WIDTH) + x, color); } int main () { int x, y; SetMode13h (); for (x = 0; x <= 320; x++) { PutPixel (x, 0, 34); } for (x = 0; x <= 320; x++) { PutPixel (x, 7, 84); } while( !kbhit() ){ } } --------------------------------
Peter B. schrieb: > for (x = 0; x <= 320; x++) Du beschreibst hier 321 Pixel!
1 | for (x = 0; x < 320; x++) |
Wenn ich x zb auf 290 setze kommt unten das Gebilde raus. Obwohl x bis 320 geht. Liegt das evtl an dem Pokeb? Gruss
:
Bearbeitet durch User
Mir fällt nichts dazu ein, außer dass int ein ungünstiger Typ für die Koordinaten ist, da Zwischenergebnisse bei der Berechnung negativ werden können. Das Problem kommt aber erst bei y-Koordinaten ab 103 zum Tragen.
Wenn ich das so schreibe stimmen die Linien. X muss bei 32 anfangen , warum? Hier habe ich 200 saubere Linien. Beim ersten Bild 1. Linie Gelb und Linie 200. Pink. Gruss ----------------------------- for (y = 0; y <= 199; y++) { for (x = 32; x <= 351; x++) { PutPixel (x,y,y); } } ----------------------------
:
Bearbeitet durch User
Bitte asserts in die putpixel einbauen assert(x >= 0 && x < 320); assert(y >= 0 && y < 200); Diese Wertebereiche darfst du nie verlassen sonst kommt Müll raus und schau dir noch mal <= und < an, sieht immer ein wenig komisch aus bei dir
cppbert schrieb: > Bitte asserts in die putpixel einbauen > > assert(x >= 0 && x < 320); > assert(y >= 0 && y < 200); > > Diese Wertebereiche darfst du nie verlassen sonst kommt Müll raus > und schau dir noch mal <= und < an, sieht immer ein wenig komisch aus > bei dir Dein x geht von [32 bis 351] da eine linie nur 320 pixel hat bist du bei 351 schon bei der naechsten Linie und 31 Pixel, deswegen die asserts einbauen Das gleiche kann dir natuerlich auch bei y passieren
da du jetzt schon mehrfach solche X zu gross Fehler gemacht hast würde ich dir raten die asserts IMMER in deine Routinen zu bauen, ist sowieso guter Stil
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.