DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Ein Paar MOS Fragen | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-07-22, 21:36 h DariusBrewka Posts: 899 [Banned user] |
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)? [ - Answer - Quote - Direct link - ] |
2004-07-23, 08:19 h Hammer Posts: 2899 User |
zu 3. Weil es nicht die original Libs sind, sondern von Genesis programmierte Ersatzlibs. Soweit ich das weiß. -- MFG Hammer http://people.freenet.de/ThaHammer/Amiga.html [ - Answer - Quote - Direct link - ] |
2004-07-23, 09:00 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2004-07-23, 12:01 h DariusBrewka Posts: 899 [Banned user] |
@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. [ - Answer - Quote - Direct link - ] |
2004-07-23, 12:30 h thomas Posts: 7718 User |
Zitat: 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/ [ - Answer - Quote - Direct link - ] |
2004-07-23, 13:15 h DariusBrewka Posts: 899 [Banned user] |
Zitat: 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 ;-) [ - Answer - Quote - Direct link - ] |
2004-07-23, 14:40 h thomas Posts: 7718 User |
Zitat: 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/ [ - Answer - Quote - Direct link - ] |
2004-07-23, 14:45 h DariusBrewka Posts: 899 [Banned user] |
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) [ - Answer - Quote - Direct link - ] |
2004-07-23, 15:02 h DariusBrewka Posts: 899 [Banned user] |
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); } } [ - Answer - Quote - Direct link - ] |
2004-07-23, 15:57 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2004-07-23, 17:37 h DariusBrewka Posts: 899 [Banned user] |
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. [ - Answer - Quote - Direct link - ] |
2004-07-23, 22:19 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2004-07-23, 23:39 h DariusBrewka Posts: 899 [Banned user] |
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 [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Ein Paar MOS Fragen | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |