-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Zeichenroutine dauert zu lange

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9

    Zeichenroutine dauert zu lange

    Anzeige

    Hallo,

    Nachdem ich nun auch ein bisschen mit Computerprogrammen arbeite, habe ich folgende Frage:
    Ich habe in Programm, welches mittels zwei for() schleifen in der Zeichenroutine eine Art Bild zeichnet.
    Jetzt ist bloß das Problem, das diese Schleifen relativ viel Leistung brauche, Zeit weiß ich aber nicht so genau.
    Ich habe allerdings bereits herausgefunden, das es nicht die Schleifen sind, sondern das zeichnen. (-> also Rectangle())
    Das wundert mich allerdings etwas, da eine so einfache Aufgabe eigentlich nicht so lange dauern dürfte.
    Ach ja, ich programmiere C++, direkt mit winapi. Ich verwende allerdings Doppelbuffering, aber ich glaube nicht,
    das es daran liegt. Falls natürlich jemand eine Möglichkeit kennt, ein Bitmap direkt zu zeichnen,
    bei der lediglich die Flächen gezeichnet werden, die nicht weiß sind, und bei der nicht die Pixel mit einem logischen Operator
    mit dem Hintergrund verknüpft wird, dann wäre das natürlich noch besser. Mit BitBlt oder StetchBlt kann man das eben soweit ich weiß nicht.
    Kann mir da irgendjemand weiterhelfen?

    MfG avrrobot

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    So ungern du das vielleicht hören magst, am schnellsten sollte sich mit DirectDraw zeichnen lassen, was natürlich ein bisschen Aufwand mit sich bringt. Die WinAPI Zeichenfunktionen sind wirklich nur begrenzt verwendbar. http://katze.dead-men.de/index.php?content=67
    Wenn es dir genügt, ein Bitmap selbst zu zeichnen, dann kannst du natürlich Speicher reservieren, dort deine Bits setzen, und das dann darstellen lassen. Besonders schnell wird das aber vermutlich nicht. Ich könnte Code dafür irgendwo rumliegen haben.

    Grüße von der Katze

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    Mahlzeit!

    Evtl. wird das Fenster nach jeder Zeichenoperation upgedatet.
    Komplexere Sachen am Besten erst in ein Bitmap im Speicher zeichnen,
    wenns dann fertig ist rüber ins Fenster kopieren (dann natürlich nicht
    pixelweise in Schleifen...).

    Schwer zu sagen ohne Code und ohne zu wissen was du genau mit
    Doppelbuffering meinst

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Wenn du mit der WinAPI arbeitest, solltes du nicht direkt auf die Ausgabe zeichnen, sondern in eine Bitmap. Anschließend via BitBlt die BitMap direkt auf den Zeichenkontext der Anzeige kopieren. Das geht um Einiges schneller. Des Weiteren sollte die Daten möglichs in einem Thread erstellt werden, damit die GUI zeichnen kann. Sonst blockieren die sich gegenseitig.

    Über die Apllikations-Instanz könnte man auch einen Speicherbereich deklarieren, auf den beide Elemente zugreifen. Dabei aber nicht vergessen, das der Zugriff konkurrierend statt findet. Sprich an die Gegenmaßnahmen denken.
    Geändert von ePyx (07.03.2012 um 21:49 Uhr)
    Grüße,
    Daniel

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Ja, das meine ich, das funktioniert auch ganz gut.
    Ich hab das auch schon mal mit nem Bitmap gemacht, aber das war nicht so ganz das was ich brauche.
    Edit: Da war ja noch jemand schneller , was meinst du genau mit den Daten im Thread?

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Na wo baust du die Zeichnung zusammen ? Im GUI-Thread ( Hauptprogramm) oder seperat ? Wird die Anzeige stetig aktualisiert? oder ist sie statisch ? Wenn statisch, wird dann jedes mal durch eine Paint-Message die Zeichenroutine aufgerufen ?
    Grüße,
    Daniel

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Im Prinzip zeichne ich direkt in der Paint Message, ich lasse sie durch windows aufrufen,
    blockiere sie aber, wenn die Zeit zum letzten mal zeichnen zu gering ist.

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Das heisst du baust die dann aber neu auf ? Verändert sich denn der Inhalt der Zeichnung, oder willst du nur sicherstellen, dass eine Größenänderung des Rahmens eine erneute Skalierung verursacht ?
    Grüße,
    Daniel

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Ja, jedes mal, wenn ich zeichne, sieht das ganze etwas anders aus, es verändert sich schon etwas.
    Und ja, ich bau das ganze jedesmal neu auf.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Oder gibt es vielleicht eine Möglichkeit, direkt auf das zum Fenster kompatible Bitmap
    im RAM zu zeichnen? Die Zeichenroutinen dauern ja vielleicht lange, aber es muss doch schnell gehen, auf ein Byte aus dem
    Bitmap im RAM zuzugreifen. Weiß jemand vielleicht, ob das geht, oder wie man einen Pointer auf das Bitmap herbekommt?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Simulation dauert extrem lang! wiso?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 05.10.2008, 21:06
  2. Selbsttest dauert zu lange [gelöst]
    Von paddycasy im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 05.08.2006, 15:41
  3. Getrc5 dauert zu lange -> Empfang über externen Interrupt
    Von Dane im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 17.03.2006, 12:57
  4. speichern auf internen EEprom dauert sehr lange
    Von Olle_Filzlaus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 12.12.2005, 11:31
  5. Wie lange dauert die Bestätigung von MCS-Elecronics?
    Von raptor_79 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 30.11.2005, 17:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •