amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Rastport initialisieren ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

13.01.2006, 13:48 Uhr

Honitos
Posts: 200
Nutzer
Ich möchte ein Image mit DrawImage_ in einen Rastport malen.
Wenn ich den Rastport eines Windows nehme, funktioniert das auch, allerdings nicht mir einem selbst erstellen Rastport.

Wie geht denn das ?

<Pseudocode>
struct Image *image
struct Rastport *rp
struct BitMap *bm

<Image ist in Image-Struktur geladen. und funktioniert>

InitBitmap *bm,*image.Depth,*image.Width,*image.Height
InitRastport *rp
*rpBitMap -> *bm

DrawImage_ *rp,*image,0,0

Leider gibt es immer einen Crash bei DrawImage, was habe ich vergessen ?

Gruss,
Sven

[ - Antworten - Zitieren - Direktlink - ]

13.01.2006, 17:21 Uhr

thomas
Posts: 7717
Nutzer

Du hast keinen Speicher für den RastPort allokiert. Ich gehe mal davon aus, daß genau wie in C "struct Rastport *rp" nur den Pointer reserviert, aber nicht die Struktur, auf die der Zeiger zeigen soll. Eigentlich hättest du schon bei InitRastPort den Crash bekommen müssen, denn InitRastPort initialisiert die Struktur, auf die der Zeiger zeigt. Und wenn der Zeiger ins Nirvana zeigt, wird halt das Nirvana initialisiert.

Bei InitBitMap ist es das gleiche. Und hier kommt noch hinzu, daß du auch keinen Speicher für die Bitplanes allokiert hast. InitBitMap füllt nur die Felder der Bitmap-Struktur, es reserviert keinen Speicher für die eigentlichen Grafikdaten.

Statt InitBitMap solltest du AllocBitMap nehmen, das reserviert Speicher für die Bitmap, initialisiert die Bitmap und reserviert Speicher für die Bitplanes.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.01.2006, 20:21 Uhr

Honitos
Posts: 200
Nutzer
@thomas:

Ich probiere das mal, indem ich mit AllocMem Speicher für die RastPort-Struktur allokiere und AllocBitmap verwende.

Komisch nur, dass die Beispiele aus den RKM (hier Libraries and Devices) das auch nicht machen, die machen auch nur "struct ... und InitRastport/InitBitmap"


Gruss,
Sven

[ - Antworten - Zitieren - Direktlink - ]

13.01.2006, 21:10 Uhr

whose
Posts: 2156
Nutzer
@Honitos:

Du hast da eine Kleinigkeit übersehen, das ist alles. In die RastPort-Falle bin ich anfangs auch öfter getappt ;)

Die RKM-Beispiele deklarieren den RastPort meist in folgender Form:

struct RastPort rp;

Beachte, daß das nicht "struct RastPort *rp" ist, wie Du es verwendet hast. In den RKM-Beispielen wird also mit der Deklaration eine globale Variable namens rp definiert, für die der Compiler auch brav Speicher zur Verfügung stellt. Da Du nur einen Zeiger auf eine RastPort-Struktur deklarierst, mußt Du Dich auch selbst um den Speicher für die entsprechende Struktur bemühen. Oder Du läßt den Zeiger weg und verwendest, wie in den RKM-Beispielen, eine globale Variable.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

13.01.2006, 22:32 Uhr

Honitos
Posts: 200
Nutzer
@whose:
Danke ! Ja wenn man nicht jeden Tag in C rumdoktert verliert man den Blick für solche Kleinigkeiten !


[ - Antworten - Zitieren - Direktlink - ]

13.01.2006, 23:05 Uhr

whose
Posts: 2156
Nutzer
@Honitos:

Naja, das hängt mehr mit dem leicht dussligen Aufbau der RKM-Beispiele zusammen. Du hättest mit Sicherheit weniger Probleme gehabt, wenn die Autoren der Beispiele diese etwas "natürlicher" gestaltet hätten. Da man mit einem RastPort fast nur in Form eines Zeigers darauf arbeitet, wäre es sinnvoller gewesen, diese auch als Zeiger zu deklarieren und entsprechend zu initialisieren. Die sich ständig wiederholenden Probleme mit der RastPort-Geschichte bei Anfängern zeigt das ziemlich deutlich, finde ich.

Zum Glück gibts Internet-Foren und Leute wie Thomas, die einem da schnell weiterhelfen :)

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Rastport initialisieren ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.