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 | |
Wenn ich x zb auf 290 setze kommt unten das Gebilde raus. Obwohl x bis 320 geht. Liegt das evtl an dem Pokeb? Gruss
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);
}
}
----------------------------
Gast
#6143206
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
Gast
#6143207
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
Gast
#6143329
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.



