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

amiga-news.de Forum > Programmierung > Datatype-Dokumentationen? Fragen? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

24.05.2004, 19:48 Uhr

geit
Posts: 332
[Ex-Mitglied]
Datatype-Dokumentationen? Fragen?

Ich will mittels der Datatypes.library ein Bild einladen. Das Problem ist, dass ich das RGB Format vorgeben will und die Pixel dann auch in dem Format sein sollen.

Die öffentlichen Beispiele bringen mich nicht weiter, da hier immer nur ein Bild in einem Fenster angezeigt wird. Ich will aber die einzelnen Pixel bearbeiten und ggf. Objekte in einen Rastport blitten.

Die öffentliche Doku ist ja mehr als dürftig!

Infos und Beispielsourcen sind auch willkommen!

Danke!


[ - Antworten - Zitieren - Direktlink - ]

24.05.2004, 22:21 Uhr

Mazze
Posts: 263
Nutzer
Ich würde es im Prinzip so machen:

NewDTObject
DoMethod Proclayout
GetDTAttr( BitmapHeader, Bitmap
Aus dem Bitmapheader Höhe und Breite der Grafik auslesen

struct Rasport rp
InitRastPort
AllocBitmap (IIRC kann man hier das Format angeben, müsste in der Cybergraphics-Doku stehen)
RastPort mit Bitmap verknüpfen
Datatype-Bitmap in neue Bitmap blitten
Das Zeichnen in die Bitmap geht dann mit dem zuvor erzeugten Rastport



[ - Antworten - Zitieren - Direktlink - ]

24.05.2004, 22:26 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Das Problem ist, dass ich das RGB Format vorgeben will und die Pixel dann auch in dem Format sein sollen.

Geht nicht. Du bekommst eine BitMap in dem Format, in dem die Datei ist. Das höchste der Gefühle ist eine 24bit-BitMap, wenn die V43 bzw. V44 datatypes.library installiert ist.

Dokumentation ist auf der Amiga Developer CD.

Ein Beispiel zum Laden von Bildern ist hier: http://home.t-online.de/home/thomas-rapp/download/dtpic.c

Der "Show Pic" - Teil funktioniert allerdings nicht. Sprich: du mußt die BitMap selbst auf Bildschirmtiefe rastern, die Datatypes machen das nur, wenn man eine Datei einlädt.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

24.05.2004, 23:19 Uhr

geit
Posts: 332
[Ex-Mitglied]
Hallo

> 24bit-BitMap, wenn die V43 bzw. V44 datatypes.library installiert ist.

Es geht in erster Linie um 16 und 24 bit Grafiken. Meistens 24Bit weil jpg.

> Dokumentation ist auf der Amiga Developer CD.
Die Beispiele da sind alle nur "Lese Bild und pappe in Fenster!". Das Beispiel zum demonstrieren des SourceType Memory Features ist besonders witzig. Das "Memory" Feature geht nämlich nicht und die Demo läd in dem Fall einfach das Bild von Platte. Es sieht also aus als würde es gehen.

> Ein Beispiel zum Laden von Bildern ist hier: http://home.t-online.de/home/thomas-rapp/download/dtpic.c

Schau ich mir an!

Geit

[ - Antworten - Zitieren - Direktlink - ]

24.05.2004, 23:47 Uhr

geit
Posts: 332
[Ex-Mitglied]

Hallo, nochmal ein Nachtrag:

i = DoMethod (o,DTM_PROCLAYOUT,NULL,1);

Wenn ich jetzt in der Amiga_LIB.doc nachschlage, bekomme ich:

result = DoMethod( obj, MethodID, ... )


....

INPUTS
obj - pointer to boopsi object
MethodID - which method to send (see <intuition/classusr.h>)
... - method-specific message built on the stack

So und wenn ich jetzt unter "method-specific" nachschlage komme ich:

DTM_PROCLAYOUT -- Layout (remap) the picture on the application's
process.

Was heißt jetzt das "NULL,1" NULL keine weiteren Argumente, aber dann wäre die "1" unnütz.
Wo kann ich jetzt erfahren, was man von mir will. Dieser Datatypeskram treibt mich zum Wahnsinn.

Geit

[ - Antworten - Zitieren - Direktlink - ]

25.05.2004, 00:20 Uhr

whose
Posts: 2156
Nutzer
Ich weiß auch nicht besonders viel über Datatypes, aber soweit ich weiß, ermöglich DTM_PROCLAYOUT auch die Angabe einer Friend-Bitmap, die, wie wohl bekannt ist, auch ein anderes als das Format der Anzeige besitzen darf. Die Wandlung wird dann von der Methode vorgenommen.

Aber frag mich jetzt nicht, wie das genau_geht.

Ein guter Startpunkt dürfte auch der Source von iff2tiff (oder so ähnlich) aus dem Aminet sein. Da kann man sich anschauen, wie man an die Bitmap-Daten des geladenen Bilds rankommt...

Grüße

[ - Antworten - Zitieren - Direktlink - ]

25.05.2004, 09:10 Uhr

thomas
Posts: 7716
Nutzer

Die Doku ist dürftig, ja, aber es ist alles da, ich habe es ja auch herausgefunden. Leider weiß ich nicht mehr genau, wo. Erste Anlaufstelle ist immer das Amiga Mail Volume 2.

Oder such einfach mal in allen Dateien nach DTM_PROCLAYOUT (DOpus kann das ziemlich gut), das wird ja eigentlich nur in dem Fall benutzt, wenn man an die Bitmap will.

DTM_PROCLAYOUT bekommt das gleiche Argument, wie GM_LAYOUT: eine struct gpLayout, die ist in intuition/gadgetclass.h beschrieben.

Daß man da eine Friend-Bitmap angeben kann, habe ich noch nicht gehört. AFAIK kann man nur beim NewDTObject einen Screen mitgeben, auf den remapped werden soll. Oder eben PDTA_Remap,FALSE, um die Bitmap im Ursprungsformat zu bekommen.

Eine 16bit-Bitmap kannst du aber ganz leicht in eine 24bit-Bitmap umwandeln, indem du sie einfach 'rüber blittest. Die werden automatisch umgewandelt.

Oder, wenn du die RGB-Daten brauchst, direkt mit ReadPixelArray und RECTFMT_RGB auslesen.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

26.05.2004, 20:58 Uhr

geit
Posts: 332
[Ex-Mitglied]

Hallo,

Ich hab jetzt einem unsichtbaren Screen erstellt und beim Öffnen via Remap und dem Screenpointer die Bitmap im richtigen Format bekommen.

Unschön, aber erstmal eine Lösung.

Witzig ist auch:

/* Allocates the resulting bitmap as a friend bitmap (BOOL) */
#define PDTA_UseFriendBitMap (DTA_Dummy + 255)

BOOL???? Es gibt keinen Tag, wo man eine Bitmap angeben kann:

/* Pointer to a class-allocated bitmap, that will end
* up being freed by picture.class when DisposeDTObject()
* is called (struct BitMap *).
*/
#define PDTA_BitMap (DTA_Dummy + 202)

/* Pointer to class-allocated bitmap, that will end
* up being freed by the class after DisposeDTObject()
* is called (struct BitMap *)
*/
#define PDTA_ClassBitMap (DTA_Dummy + 216)

Entweder hier ist eins gemeint, da beide via GetDTAttr() immer die selbe Bitmap zurück geben.

Wer bei dem DoMethod() Problem noch Infos hat, ist willkommen. Ich hasse Unklarheiten! (-8

i = DoMethod (o,DTM_PROCLAYOUT,NULL,1);

Wenn ich jetzt in der Amiga_LIB.doc nachschlage, bekomme ich:

result = DoMethod( obj, MethodID, ... )

....

INPUTS
obj - pointer to boopsi object
MethodID - which method to send (see <intuition/classusr.h>)
... - method-specific message built on the stack

So und wenn ich jetzt unter "method-specific" nachschlage komme ich:

DTM_PROCLAYOUT -- Layout (remap) the picture on the application's
process.

Was heißt jetzt das "NULL,1" NULL keine weiteren Argumente, aber dann wäre die "1" unnütz.
Wo kann ich jetzt erfahren, was man von mir will. Dieser Datatypeskram treibt mich zum Wahnsinn.


Die Datatypes.library ist eine Library voller Missverständnisse! (-8



Geit


[ - Antworten - Zitieren - Direktlink - ]

27.05.2004, 09:29 Uhr

thomas
Posts: 7716
Nutzer

Ich habe dir gesagt, was das heißt, aber du willst es wohl nicht verstehen. Die eigentliche Funktion ist DoMethodA und bekommt das Object und eine Message. Im Fall von DTM_PROCLAYOUT ist das eine struct gpLayout. DoMethod ist nur ein Varargs-Stub für DoMethodA, d.h. du schreibst die ganze Struktur einfach in die Parameter.

Also entweder

struct gpLayout gpl = {DTM_PROCLAYOUT,NULL,1};
DoMethodA (o,&gpl);

oder

DoMethod (o,DTM_PROCLAYOUT,NULL,1);


Bei den ganzen Tags mußt du berücksichtigen, daß die auch zur Kommunikation zwischen SubClass und SuperClass benutzt werden, also z.B. zwischen jpeg.datatype und picture.datatype. Für ein Anwendungsprogramm haben die meisten keine Bedeutung.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

27.05.2004, 14:09 Uhr

geit
Posts: 332
[Ex-Mitglied]
Hallo,

> Ich habe dir gesagt, was das heißt, aber du willst es wohl nicht verstehen.

Ja sorry! Die Zeile hab ich einfach übersehen.

> Die eigentliche Funktion ist DoMethodA und bekommt das Object und eine Message. Im Fall von DTM_PROCLAYOUT ist das eine struct gpLayout.

Ist jetzt klar.

> DoMethod ist nur ein Varargs-Stub für DoMethodA, d.h. du schreibst die ganze Struktur einfach in die Parameter.
Das ist logisch.

> Daß man da eine Friend-Bitmap angeben kann, habe ich noch nicht gehört.
Ich hab auch nur den BOOL Tag gefunden. Entweder ist die doku falsch und es sollte der Pointer auf die Friendly Bitmap sein. Oder
einer der *beiden* Bitmap Tags kann auch via SET/Init benutzt werden. Beim Auslesen sind die beide immer identisch.

> AFAIK kann man nur beim NewDTObject einen Screen mitgeben, auf den remapped werden soll.
Ich hab das jetzt mit einem fakescreen gelöst.

Danke!

Geit

[ - Antworten - Zitieren - Direktlink - ]

27.05.2004, 14:23 Uhr

thomas
Posts: 7716
Nutzer

Ich frage mich, wozu du den Fake-Screen brauchst. Du schreibst, du möchtest 16bit- und 24bit-Grafiken laden. Die kannst du direkt laden, ohne Remap, also mit PDTA_Remap,FALSE. Dann bekommst du in der PDTA_BitMap die Original-Bitmap, üblicherweise in 24bit, wenn du den V43-Modus setzt. Und eine 24bit-Bitmap kannst du in einen 16- oder 24bit-Screen einfach reinblitten.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

27.05.2004, 19:07 Uhr

geit
Posts: 332
[Ex-Mitglied]
Hallo,

Diesmal hast Du nicht richtig gelesen.

Den Screen brauche ich, weil ich ein *bestimmtes* RGB Format haben will. Nicht einfach nur 24 oder 16 Bit. Ich will R5G6B5, R5G5B5, B5G6R5PC, B5G5R5PC, R5G5B5PC, R5G6B5PC, ... vorwählen können. Das kann man über die DisplayID machen, aber da ich keine Möglichkeit gefunden habe diese anzugeben, muß ich einen Screen angeben.

Geit


[ - Antworten - Zitieren - Direktlink - ]

27.05.2004, 21:06 Uhr

thomas
Posts: 7716
Nutzer

Und warum bestehst du darauf, daß dir die Datatypes die Bitmap im richtigen Format liefern ? Warum legst du nicht eine eigene Bitmap an und blittest die Dt-Bitmap einfach 'rüber ? Dann kannst du das Datatype-Object auch gleich wieder freigeben, was eine Menge Speicher spart.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

28.05.2004, 01:40 Uhr

geit
Posts: 332
[Ex-Mitglied]

> Und warum bestehst du darauf, daß dir die Datatypes die Bitmap im richtigen Format liefern ?

Naja, sie können es doch, wenn man ihnen einen Screen gibt. Warum sollte ich es also umständlicher machen als nötig. Der Screen ist zwar nicht nötig, aber für meinen Zweck ausreichend.


> Warum legst du nicht eine eigene Bitmap an und blittest die Dt-Bitmap einfach 'rüber ? Dann kannst du das Datatype-Object auch gleich wieder freigeben, was eine Menge Speicher spart.

Das ist schon klar. Ist aber für meinen Zweck erstmal zu umständlich. Da ich später sowieso noch vieles Ändern muß, hab ich den schnellen Weg gewählt. Speicher verbraucht ist sowieso nicht so wild, da ich nach dem "benutzen" der Daten das Object wieder freigebe.

Geit

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Datatype-Dokumentationen? Fragen? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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