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

amiga-news.de Forum > Programmierung > Ein Paar MOS Fragen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

22.07.2004, 21:36 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Hi an Alle, auch wenn das hier vieleicht nicht das 100% Richtige Forum ist, aber auf mdc.morphos.net habe ich bisher nicht Alle Antworten erhalten. Oder dort ist nicht viel los!

1. Ist das Richtig, das die icon.library von MOS keine ColorIcons(=OS3.5/9) icons handeln kann, genauso wie NewIcons, d.h. für letztere braucht man den NewIcons Patch). Ich frage, weil ich mir die includes dafür vom MDC geladen habe und dort sind die Funktionen alle beschrieben, auch wenn die Versionsnummen nicht stimmen.

2. Hat jemand mit den scalos libs&datatypes schon icons geladen und dargestellt?. Wie ich das gemacht habe, funktioniert das überall nur scheinbar nicht bei MOS! (Ich muss in einen OffScreen Buffer malen, ncht auf einen Screen/Window), jedenfalls kommt bei mir bei MOS der Iconumriss, aber nicht das icon selbst!

3. Warum haben MOS libs eine weitaus höhere Versionsnummer, als OS3.5/9 libs? Funktionen die man aber braucht existieren nicht! (OpenWorkbenchObject(), z.B.)

Warum macht scheinbar nur mein Prog auf MOS Probleme, überall sonst aber kaum (nuja vieleicht)?

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 08:19 Uhr

Hammer
Posts: 2899
Nutzer
zu 3. Weil es nicht die original Libs sind, sondern von Genesis programmierte Ersatzlibs.
Soweit ich das weiß. :D
--
MFG

Hammer

http://people.freenet.de/ThaHammer/Amiga.html

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 09:00 Uhr

thomas
Posts: 7717
Nutzer

1. Laut den Antworten, die du im MDC-forum bekommen hast, gibt es unter MorhOS keine Möglichkeit, an die Icon-Blder zu kommen, außer über Datatypes.

2. Scalos ? Nein. Ich habe Icons bisher nur als Nebeneffekt mit Datatypes geladen, weil PicShow halt alle Bilder anzeigt, für die Datatypes existieren. Und mein MorhpOS lädt alle Icons standardmäßig als Bilder, ohne daß ich etwas zusätzlich installieren mußte. Ob OS3.5-Icons auf MorphOS überhaupt funktionieren, weiß ich nicht. Mit PNG- und NewIcon funktioniert es jedenfalls.

3. Bis Version 45 funktioniert das mit den Versionsnummern. Ab 50 gibt es halt zwei unterschiedliche Entwicklungszweige. Der eine basiert auf OS 3.1, der andere auf OS3.9. Du mußt halt entweder mit OS3.1-Mitteln auskommen, oder eine Unterscheidung machen:

code:
if (lib->lib_Version >= 50)
{
   if (FindResident ("MorphOS"))
   {
      Printf ("MorphOSn");
   }
   else
   {
      Printf ("AmigaOS 4n");
   }
}


4. Sei mir nicht böse, aber ich habe den Eindruck, daß du ganz gerne einfach drauf los programmierst und nur im Problemfall die Dokumentation konsultierst und auch dann nicht so richtig ausfühlich.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 12:01 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@Hammer

wird wohl so sein, allerdings ist es für mich fraglich so zu handeln.

@thomas

zum letzterem, naja auch ich habe kein MOS Projekt erstellt!, sondern ein einfaches ASO3.1 mit Extensions für 3.5/9, somit sehe ich nicht, dass ich einfach drauf los programmiert habe. Auf OS3.1 funktioniert alles ganz hervorragend, nur auf MOS nicht. Wenn MOS höhere VNummern hat, ewartet man auch das das dann geht, da brauche ich nicht raten und da ich weder MOS noch einen PPC Rechner besitze schon garnicht sondern nur das glauben was ich lese.

BZW.wenn ich ein 3.1/5/9 Project starte brauche ich nicht zuerst die MOS Docs zu lesen. OK hab's vergessen zu erwähnen das es kein Nativ-MOS Project ist.

Ich will einfach simpel, dass mein 68K Programm auch auf MOS läuft, was es auch sollte, wenn MOS mit 3.1 Kompatibel ist, mein Tool ist es einfach!.

zu 2:

kann man über die DataTypes auch die Masken, bzw im Falle von PNG-Icons auch den Alphakanal erhalten?, bei AOS habe ich das nicht können.

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 12:30 Uhr

thomas
Posts: 7717
Nutzer
Zitat:
Auf OS3.1 funktioniert alles ganz hervorragend, nur auf MOS nicht. Wenn MOS höhere VNummern hat, ewartet man auch das das dann geht, da brauche ich nicht raten und da ich weder MOS noch einen PPC Rechner besitze schon garnicht sondern nur das glauben was ich lese.

Naja, MorphOS ist halt nicht AmigaOS. Es ist ein Nebenzweig, der auf Version 40, allenfalls 43 aufsetzt. 44 und 45 werden nicht berücksichtigt. Die Abfrage über die Versionsnummer allein, reicht da nicht aus. Du kannst ja auch MorphOS und AmigaOS4 nicht an der Versionsnummer unterscheiden. Und du kannst mit Sicherheit davon ausgehen, daß eine Version 51 von MorphOS nicht mit Version 51 von AmigaOS kompatibel ist.

Wenn es auf 3.1 problemlos funktioniert, warum benutzt du dann 3.9-Erweiterungen ?

Ob man die Alpha-Maske auslesen kann, weiß ich nicht. Kann ich aber mal ausprobieren.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 13:15 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Wenn es auf 3.1 problemlos funktioniert, warum benutzt du dann 3.9-Erweiterungen ?

Beispielweise, warum soll ich die wbstart.library benutzen, wenn es auch mit workbench/OpenWokbenchObject() funktioniert?.

Man kann ja auch mit 3.5/9 zusätzliche Features anbieten.

Ich bin gerade am versuchn die icons über die Dataypes einzulesen, aber so oft habe ich mit der datatypes.library nicht gearbeitet. Im pictures DataType gibt's eine Methode PDTA_READPIXELARRAY, mit entsprechendn Format hoffe ich auch den AlphaKanal auslesen zu können, allerdings funktioniert DoMethod() hier nicht so wie ich will, bzw es liefert nichts! Muss mal suchen wie man das richtig macht ;-)



[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 14:40 Uhr

thomas
Posts: 7717
Nutzer
Zitat:
Muss mal suchen wie man das richtig macht ;-)

Wenn du's gefunden hast, kannst du ja mal schreiben. Die Datatypes-Sachen sind *sehr* dürftig dokumentiert.

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

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 14:45 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Nuja, hätte ich mir mal wieder denken können, dass das mit den AlphaKanal nicht klappt. Wozu gibt es dann das Format wenn AOS damit nichts anfangen kann?

Vieleicht geht's ja mit einer anderen picture.datatypes Version, oder auf MOS, aber hier mit V45.7 geht's scheinbar nicht.

Und auch wenn, wie lese ich damit icons ein?, mit ".info" als Erweiterung wird gibt "NewDTObject()" NULL zurück, wie erhalte ich die ToolTypes?, bzw. ich habe keine Lust mit NewDTObject() das Image zu laden und mit OpenDiskObject() etc. die ToolTypes. Oder was ist mit alternativen (=selected) Images?

Es ist doch Alles extrem nervig!

Werde wohl eher bei Scalos nachfragn, warum es auf MOS nicht klappt (wie gesagt die Umrisse sind vorhanden, nur der Background ist völlig schwarz)

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 15:02 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ein Testschnipsel aus meinem Code, die Funktion pushIcon() soll ein BeispielBild in einen RastPort zeichnen, tut es aber nur, falls ich statt DrawAlphaImageToRP() DrawImageToRP() benutze, welches den Alphakanal ignoriert.

das geladenen Bild " images.pointer " ist ein png icon, welchem die Erweiterung beraubt wurde, sonst lädt NewDTObject() das ding nicht.

Wie gesagt das ist nur ein Testcode

code:
void DisposeImageContainer(struct NewImage *ni) {
	if (ni) {
		if (ni->data) {
			FreePooled(pool, ni->data, ni->w*ni->h*4);
		}
		FreePooled(pool, ni, sizeof(struct NewImage));
	}
}


void DrawAlphaImageToRP(struct RastPort *rp, struct NewImage *ni, UWORD x, UWORD y) {
	struct	Icons i;
	if (ni) {
		if (ni->data) {
			i.w = ni->w;
			i.h = ni->h;
			i.map0 = ni->data;
			DrawRGBAImage(rp, &i, x, y, FALSE, 0, 0);
		}
	}
}

void DrawImageToRP(struct RastPort *rp, struct NewImage *ni, UWORD x, UWORD y) {
	if (ni) {
		if (ni->data) WritePixelArray(ni->data, 0, 0, ni->w*4, rp, x, y, ni->w, ni->h, RECTFMT_ARGB);
	}
}

struct NewImage *NewImageContainer(UWORD w, UWORD h) {
	struct	NewImage *ni;
	ni = AllocPooled(pool, sizeof(struct NewImage));
	if (ni) {
		ni->w = w;
		ni->h = h;
		ni->data = AllocPooled(pool, w*h*4);
		if (ni->data == NULL) {
			FreePooled(pool, ni, sizeof(struct NewImage));
			ni = NULL;
		}
	}
	return ni;
}

void pushIcon(struct RastPort *rp) {
	struct	BitMapHeader   *bmhd = NULL;
	struct	FrameInfo 	   fri = {NULL};
	struct	NewImage	   *ni;
	struct	pdtBlitPixelArray pa;
            Object		   *icon;
	UWORD		   w, h;

	icon = NewDTObject("images:pointer",   DTA_SourceType,   DTST_FILE,
		DTA_GroupID,      GID_PICTURE,
		PDTA_Remap,	FALSE,
		PDTA_DestMode,    PMODE_V43,
		TAG_DONE);

	if (icon) {
		get(icon, PDTA_BitMapHeader, &bmhd);
		if(bmhd) {
			w = bmhd->bmh_Width;
			h = bmhd->bmh_Height;
			ni = NewImageContainer(w, h);
			if (ni) {
				pa.MethodID = PDTM_READPIXELARRAY;
				pa.pbpa_PixelData = (APTR) ni->data;
				pa.pbpa_PixelFormat = PBPAFMT_RGBA;
				pa.pbpa_PixelArrayMod = w*4;
				pa.pbpa_Left = 0;
				pa.pbpa_Top = 0;
				pa.pbpa_Width = w;
				pa.pbpa_Height = h;
				DoMethodA(icon, (Msg) &pa);
				DrawAlphaImageToRP(rp, ni, 0, 0);
			}
		}
		DisposeDTObject(icon);
	}
}


[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 15:57 Uhr

thomas
Posts: 7717
Nutzer

Mir fällt dabei auf, daß du die Daten als RGBA aus dem Datatype liest, aber mit ARGB an WritePixelArray übergibst. Wenn das (wie du sagst) funktioniert, müßte das heißen, daß eine der beiden Funktionen (PDTM_READPIXELARRAY oder WritePixelArray) falsch arbeitet. Und vermutlich interpretiert die Funktion DrawRGBAImage dann die Daten auch nicht so, wie sie vorliegen.

Ich würde die R, G, B und A-Kanäle einfach mal einzeln nebeneinander als Graustufen anzeigen.

Hast du mal DrawARGBImage ausprobiert ?

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 17:37 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Irgendwie habe ich schon gewusst das dieses kommt ;-), aber egal auch wenn die Kanäle vertauscht sind müsste irgendwas kommen. DrawAlphaRGBToRP() zeichnet nur, wenn die Kanäle vertauscht sind, dann aber nur in Falschfarben, bei Kanälen in der richtigen Reihenfolge nicht, da dort der Alphakanal NULL ist.

Leider habe ich in meinen Programm aus früheren Zeiten teilweise auch eine andere Reihenfolge der Kanäle, mit welcher WritePixelArray() nichts anfangen kann und somit sieht's manchmal komisch aus. D.h. für
DrawAlphaRGB...() brauche ich ein anderes Pixelformat als für DrawRGB...(). Ist im Code nicht geändert worden.
Mit WritePixelArray() funktioniert das ganze (wenn auch Falsch, wenn ich das Falsche Pixelformat setze.), da hier seitens cgx.lib der Alpha ignoriert wird.

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 22:19 Uhr

thomas
Posts: 7717
Nutzer

Wenn du den roten Kanal als Alpha nimmst, ist es klar, daß du etwas bekommst, aber das sieht dann komisch aus. Wenn der Alpha-Kanal null ist, dann ist da kein Alpha-Kanal, den kannst du auch nicht erzwingen.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 23:39 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Natürlich ist da Alpha=NULL, da die Amiga Datatypes es trotz anderslautender Angabe nicht laden. Das Bild was geladen wird hat einen AlphaChannel, hatte schon damals das Problem, es wird maximal eine 1 Plane Maske unterstützt mehr nicht (wenn überhaupt).

Das ist wie beim cxg/p96 System, Funktionen kennen das RGBA Format, das A wird aber vollkommen ignoriert, ebenso sind die AlphaWerte in der guigfx.library nutzlos, da ich damit noch nie Bilder mit Alpha mischen konnte. Aus diesem Grund die DrawARGBImage() Funktion, die Source & Dest über Alpha per Hand mischt.

Aber ich kann,auch wenn Alpha geladen wrd, nichts damit anfangen, da ja NewDTObject() Icons sowieso nicht lädt und dann würden mir ja auch noch die ToolTypes fehlen. Ich muss alles auf MOS über die scalos API machen was auch geht, nur auf MOS halt nicht! bzw. unter der Scalos (iconobject API) wird das icon zwar geladen und auch der Alpha Kanal stimmt, nur bekomme ich selbst keine Bilddaten! Heisst ich bekomme Schwarze Bilder mit den richtigen Umrissen!

gruss

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Ein Paar MOS Fragen [ - Suche - Neue Beiträge - Registrieren - Login - ]


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