mikrocontroller.net

Forum: PC-Programmierung VGA-Linien stimmen nicht beim Zeichnen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Angehängte Dateien:

Bewertung
-1 lesenswert
nicht 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() ){ }
}
--------------------------------

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> for (x = 0; x <= 320; x++)

Du beschreibst hier 321 Pixel!
for (x = 0; x < 320; x++)

von Peter B. (funkheld)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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
von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Peter B. (funkheld)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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);
   }
}
----------------------------

: Bearbeitet durch User
von cppbert (Gast)


Bewertung
0 lesenswert
nicht 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

von cppbert (Gast)


Bewertung
0 lesenswert
nicht 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

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.