Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 |
SDL_Surface *screen; void putpixel(int x, int y, int color) { unsigned int *ptr = (unsigned int*)screen->pixels; int lineoffset = y * (screen->pitch / 4); ptr[lineoffset + x] = color; } |
Zitat
1,
Wie kann es sein dass ein Bildschirm von zb. 600x400 Pixeln in einer einzigen Integervariable gespeichert wird? (bzw. in einem einzigen Integerspeicherbereich auf den der Pointer zeigt)
Zitat
Dann stellt sich mir dazu die Frage was genau das "screen->pitch" bedeutet...die Erklärungen im Internet sprechen immer nur davon dass man durch 4 dividieren muss weil ein Byteformat zurückgegeben wird. Und es sozusagen eine "Scanlinie" ist. Habt ihr da eine ausführlichere Erklärung?
Zitat
Warum braucht man überhaupt ein lineoffset, was genau ist das? Ich rate mal dass man dadurch irgendwie die Pixel im Integerpointer unterscheiden kann...
(warum greift man nicht per x und y auf den entsprechenden Wert im "pixels" zu?..ja, das is kein array aber....bin verwirrt)
Zitat
Warum multipliziert man zuerst y, addiert x später an anderer Stelle? Ihr seht schon, ich tu mir sehr schwer, will das aber trotzdem verstehen.
Zitat
Der Pointer ist wie du schon erkannt hast ein Zeiger auf einen Speicherbereich. Mit dem [] Operator kannst du jeden einzelnen Integer des
Speicherbereiches durchgehen.
Zitat
Durch Pitch / 4 weist du, wie lang eine Pixelreihe ist.
Zitat
Wenn du jetzt einen Pixel an 0,5 Platzieren willst, musst du zur 5. Pixelreihe springen. Daher y * länge einer Pixelreihe. Klingt logisch oder?
Nun hast du also schonmal die richtige Reihe, aber was ist mit der Spalte?
Das ist ganz einfach, du addierst einfach noch den X Wert hinzu, um in der richtigen Spalte zu landen. Verstanden? Stell es dir wirklich mal bildlich vor. Es ist wirklich nicht schwer zu verstehen.
Zitat
Der Bereich ist in Bytes: Breite * Höhe * 4 groß.
Werbeanzeige