VGA-Linien stimmen nicht beim Zeichnen.

OP #6143073
Lesenswert?

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() ){ }
}
--------------------------------
Angehängte Dateien:
OP #6143114
Lesenswert?

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);
   }
}
----------------------------
Angehängte Dateien:
Gast #6143206
Lesenswert?

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
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren