![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > Truecolor Icons (PNG) auf AOS/MOS | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-03-30, 20:41 h DariusBrewka Posts: 899 [Banned user] |
Hallo, ich sollte auf Anregung in meim Programm PNG icons Support einbauen und wollte wissen, ob es überhaupt Möglich ist mit der Icon Library diese einzulesen, da diese Library meines wissens nach nur für Palettenbasierende Icons gedacht ist, vor allem wie man die Alphamaske ansprechen kann, da die Masken normalerweise ja nur 1 Bit Tiefe haben. Auf OS3.x soll der Powericons Patch benutzt werden, dazu meine nächste Frage, würde das ganze dan ebenso auf MOS laufen, oder geht das dort anders? (habe von MOS keine Ahnung). Am vernünftigsten würde ich das ganze über das PNG Datatype machen, aber leider ist soweit ich das sehe damit nicht möglich Alphamasken einzulesen, oder irre ich mich da? danke Darius [ - Answer - Quote - Direct link - ] |
2004-03-31, 11:11 h Solar Posts: 3680 User |
PNG ist palettenbasierend... [ - Answer - Quote - Direct link - ] |
2004-03-31, 22:07 h Mazze Posts: 263 User |
Ich habe vor kurzem mal was mit libpng gemacht und da waren sowohl paletten- als auch truecolor Modi dabei. [ - Answer - Quote - Direct link - ] |
2004-03-31, 23:21 h Georg Posts: 107 User |
Zitat: [ - Answer - Quote - Direct link - ] |
2004-03-31, 23:24 h Georg Posts: 107 User |
Zitat: Genau so ist es. Ein Besonderheit bei den Paletten-Modi ist übrigens, daß jedem Palette Eintrag ein unterschiedlicher Alpha-Wert zugewiesen sein kann. D. h. auch ein paletten-PNG Image kann im Gegensatz zu GIF und Co. theoretisch mehr als nur ne 1 Bit Maske haben. [ - Answer - Quote - Direct link - ] |
2004-04-01, 10:59 h gni Posts: 1106 User |
Zitat:Da die PNG Icons per Patch realisert werden (AOS 3.x), sollte alles transparent sein. Speziellen Support (was immer das sein soll) würde ich nicht machen. [ - Answer - Quote - Direct link - ] |
2004-04-05, 03:04 h DariusBrewka Posts: 899 [Banned user] |
Hmm, ich möchte die Icons nicht malen, sondern die Daten haben und zwar mit Alpha Maske, ich bin mir ziemlich sicher, das DrawIconState die nicht hergibt, sondern wenn überhaupt das Ikon direkt mit dem Hintergrund verknüpft. Ich muss die Ikons ggf verkleinern, da hilft es mir nicht wenn ich die mittels DrawIconState zeichen kann, da ich dann die Maske nicht habe (oder irre ich mich da?). Anders ausgedrückt möchte ich so etwas haben, wie eine RGBA BitPlane Ahso, konnte nicht früher antworten, da mein System völlig zerstört war [ - Answer - Quote - Direct link - ] |
2004-04-05, 09:23 h thomas Posts: 7719 User |
Ich weiß ja nicht, wie vollständig PowerIcons ist, aber probier doch mal IconControl() mit ICONTROLA_GetImageData und ICONTROLA_GetImageMask. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-05, 13:23 h DariusBrewka Posts: 899 [Banned user] |
Hmm, GetImageData ist so vermute ich für 8 Bit Icons gedacht, da ich keine Funktion finde, welche die Tiefe angibt. Ausserdem steht in den AutoDocs, dass GetImageData für Palettenbasierende Icons gedacht ist. GetImageMask wird wohl keine AlphaMasken zurückgeben, jedenfalls wird nur ein PlanePointer zurückgegeben (lt. Autodocs) Ich habe auch einen gewissen Erfolg bisher (wenn ich mich auf Standardmasken beschränke, Alphakanal ist nicht so wichtig), nur bei PNG icons geht das mit den Masken (über GetImageMask) nicht so richtig. [ - Answer - Quote - Direct link - ] |
2004-04-05, 14:39 h thomas Posts: 7719 User |
Ich verstehe nicht, warum du so sehr am Wortlaut der Autodocs festhältst. Du wirst da mit Sicherheit nichts über Truecolor-Icons und Alpha-Masken finden. AmigaOS kann nur Paletten-Icons mit 8 Bit Farbtiefe. PowerIcons ist ein Patch, der alle diese Funktionen umbiegt. Wenn du irgendwo Doku darüber findest, dann höchstens in der PowerIcons-Anleitung. Wenn dort nichts steht, hilft nur ausprobieren. Als Umgehung, wenn du nichts findest, könntest du den Hintergrund auf Icon-Größe vergrößern, dann mit DrawIconState hineinzeichnen und dann alles zusammen verkleinern. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-05, 23:45 h DariusBrewka Posts: 899 [Banned user] |
Nuja, so einfach ist das nicht da ich die Icons nicht einfach so verkleinere (d.h. durch einfaches weglassen von Zeilen/Spalten), sonderen ggf. einen Filter anwende d.h. würde ich dann das ganze zurückzeichnen so würde man schon einen Block sehen. [ - Answer - Quote - Direct link - ] |
2004-04-06, 12:35 h Holger Posts: 8116 User |
Zitat:Weil PowerIcons sich ebenfalls an genau den selben Autodocs orientiert. Hast Du schon mal etwas von Kompatibilität gehört? Wenn in den Autodocs steht, daß Funktion xyz eine 1Bit-Maske zurückliefert, dann wird auch die gepatchte Version von xyz eine 1Bit-Maske zurückliefern, weil alles andere nicht funktionieren würde. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2004-04-06, 12:42 h Holger Posts: 8116 User |
@DariusBrewka: Hast Du mal getestet, was DrawIconState macht, wenn Du in eine RGBA-BitMap zeichnen läßt? Werden Alpha-Werte übertragen, oder wird der Alpha-Wert mit einer Konstante überschrieben? In beiden Fällen könnte man etwas daraus machen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2004-04-06, 19:01 h Georg Posts: 107 User |
Zitat: Theoretisch müßte das schon gehen. Aber dann muß das der entsprechende PNG DataType auch unterstützen. Und auch dann könnte ich auf die Schnelle nicht sagen, wie genau man den Alpha-Channel abfragen kann. Picture.datatype und Co. sind nicht gerade gut dokumentiert. Möglicherweise geht's über das Abfragen von (BitMapHeader.bmh_Masking == mskHasAlpha) zum Feststellen ob ein alpha channel da ist, und dann das Einlesen der Grafikdaten inkl. AlphaChannel in nen chunkybuffer per PDTM_READPIXELARRAY(PBPAFMT_RGBA|PBPAFMT_ARGB). Ansonsten einfach was auf Basis von libpng zusammen basteln. Wie das geht kannst du von den AROS Sourcen (insbesondere AROS/workbench/classes/datatypes/png/directaccess.c) abschauen. Dessen png.datatype und PNG Icon support basiert darauf. [ - Answer - Quote - Direct link - ] |
2004-04-06, 23:28 h DariusBrewka Posts: 899 [Banned user] |
@Holger Im Moment zeichne ich in eine WB Friendly Bitmap, was auch ganz gut geht (bis auf den Alphakanal), habe auch versucht eine ARGB Bitmap zu nehmen, aber da ist DrawImageState immer abgeschmiert, was aber auch daran liegen könnte, dass ich mich mit Cybergraphix bisher noch nie so richtig beschäftigen musste (d.h. 32 Bit Bitmaps). Andererseits wie werden denn die neuen Alphawerte berechnet, wenn ich mittels DrawImageState offscreen Bitmap zeichne und wenn ich ganz normale Icons mit 1 Bit Maske in eine ARGB Bitmap mittels DrawImageState zeichne, wird dann auch ein AlphaKanal erzeugt, der entweder für jedes Pixel 0x00 oder 0xff ist? @Georg Das mit PNG und den Datatypes habe ich soweit ich mich erinnern kann schonmal getestet und es war nicht möglich, andererseits ist das so eine Sache mit den PNG Icons, denn mein Programm ist eigentlich für Icons ausgelegt (wegen den ToolTypes), und es gibt einen Patch (PowerIcons) den die meisten die das PNG Icons Feature brauchen sowieso installiert haben dürften, dieser erledigt auch die Berechnung des selected Images. Ich habe bisher die Berechnung der Masken für Icons per Hand erledigt, da ich nur OS3.1 hatte, nun unter OS3.5 habe ich das umgestellt und die Masken mittels IconControl besorgt und daraus AlphaWerte erstellt, da mein Tool jetzt intern im ARGB Format arbeitet. Wenn ich normale Icons einlade sieht auch alles schön aus, bei PNG Icons wird jedoch nur die obere linke Ecke (8 x 8 Pixel) dargestellt, was aber nicht daran liegt das die Bilddaten fehlen würden, denn wenn ich die AlphaWerte auf 255 Festsetze wird das ganze Icon gezeichnet, d.h. es ist nur die Maske der PNG Icons Falsch. Wie auch immer, ich habe eine Mail an den Author des PowerIcon Patches geschrieben, vieleicht hilfts weiter. Danke [ - Answer - Quote - Direct link - ] |
2004-04-07, 18:18 h Holger Posts: 8116 User |
Zitat: Das war ja meine Frage. Ich dachte, Du könntest es schneller testen, wenn Du im Prinzip den dazu schon notwendigen Code schon hast. Aber wenn Du mit 32Bit-BitMaps Probleme hast, dann wühle ich mal in meiner Code-Rumpelkiste... Ich würde erwarten, dass bei 1Bit-Masken die Werte auf Opaque (ähm 0xff?) gesetzt werden, wenn die Maske 1 ist, und die anderen Werte _nicht angefaßt werden_, also transparent bleiben, wenn man sie vorher auch entsprechend initialisiert hat. Versuch macht kluch... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2004-04-07, 23:49 h DariusBrewka Posts: 899 [Banned user] |
@Holger Das mit der 32 Bit Bitplane hat sich erledigt, lag nur daran daß ich ein Paar Tags bei DrawImageState nicht gesetzt habe und er wohl den Speicher überschrieben hat, wie auch immer sind die Alpha Werte wenn ich mittels DrawImageState in diese Bitmap schreibe alle 0, was ich auch erwartet habe, da er den Hintergrund und Vordergrund mischt und dann dann in die BitPlane schriebt. Ohne Alphawerte wäre es auch gangbar, wenn die Normale 1Bit Maske korrekt wäre, aber wenn ich diese benutze scheint nur ein ca. 16*16 Pixel Block zu existieren wo alle Bits gesetzt sind, alle anderen sind 0. Mit Normalen Icons funktioniert alles Tadellos. Wie auch immer, ich habe bei der Autorin? von PowerIcons nachgefragt, mal sehen was draus wird, es dürfte nicht so schwer sein auch die Alphawerte in Bit Maps hineinzuschreiben. gruss [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Truecolor Icons (PNG) auf AOS/MOS | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |