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

amiga-news.de Forum > Programmierung > Alphamaske aus PNG und IFF laden [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 3 [ - Beitrag schreiben - ]

14.08.2005, 23:06 Uhr

bubblebobble
Posts: 707
Nutzer
Hallo Alle!

Weiss jemand wie man die Alphamaske aus PNG und/oder
IFF-ILBM Grafiken laden kann ?
Datatypes (bzw. via guigfx) scheint das nicht zu unterstüten ?

Wie machen das die PNG Icons ?


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 10:01 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
Weiss jemand wie man die Alphamaske aus PNG und/oder IFF-ILBM Grafiken laden kann? Datatypes (bzw. via guigfx) scheint das nicht zu unterstüten?

Wie machen das die PNG Icons ?

Vermutlich mit einer eigenen Laderoutine, die die libpng direkt benutzt.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 11:09 Uhr

bubblebobble
Posts: 707
Nutzer
Gibt es die als Amiga Shared Lib mit Doku irgendwo ?

Weis jemand, ob das IFF-ILBM Format offiziell Alpha Channel
unterstützt ?
ArtEffects schreibt einen "ALPHA" Chunk in die IFF Dateien,
ist das eine eigene Erfindung oder gibt es andere Programme
oder Datatypes, die das Unterstützen ?
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 11:53 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
Gibt es die als Amiga Shared Lib mit Doku irgendwo?

Nicht das ich wüßte.
Zitat:
ArtEffects schreibt einen "ALPHA" Chunk in die IFF Dateien, ist das eine eigene Erfindung oder gibt es andere Programme oder Datatypes, die das Unterstützen?
DTs können ohne weiteres den Alpha-Kanal laden. Nur was dann damit machen?

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 12:46 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
DTs können ohne weiteres den Alpha-Kanal laden. Nur was dann damit machen?

z.B. mit DoMethod(...PDTM_READPIXELARRAY,...PixelFormat = PBPAFMT_ARGB)
den User ermöglichen etwas von dem Kanal zu haben?

Tschuldigung, das "Nur was dann damit machen?" ist eine ziemlich blöde Antwort. Ich könnte das sehr gut gebrauchen und muss auf 68K die Maske immer als zusätzliche Datei speichern. AROS kann das ja und so schwierig das in 68 zu implementieren kann das wohl auch nicht sein.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 13:07 Uhr

bubblebobble
Posts: 707
Nutzer
Die Datatypes laden zwar den Alphakanal, und nutzen
den wenn man über das Datatype blittet. Aber es gibt wohl
unter OS3.x keine Funktion um an die Alphamaske innerhalb der Bitmap oder ByteArray zu kommen.
Man kann die Bitmap immer nur ohne Alphamaske bekommen.
z.B. ARGB als Pixelformat hinzufügen würde schon reichen.

Das picture.datatype von OS4 kann das wohl.
Wenn das AROS picture.datatype das auch kann, könnte man das
doch evtl. für OS3.x kompilieren, oder nicht ?



[ Dieser Beitrag wurde von bubblebobble am 15.08.2005 um 13:32 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:27 Uhr

gni
Posts: 1106
Nutzer
Zitat:
DariusBrewka:
Zitat:
DTs können ohne weiteres den Alpha-Kanal laden. Nur was dann damit machen?
z.B. mit DoMethod(...PDTM_READPIXELARRAY,...PixelFormat = PBPAFMT_ARGB)
den User ermöglichen etwas von dem Kanal zu haben?

Welcher picture.datatype unterstützt PBPAFMT_ARGB?
Zitat:
Tschuldigung, das "Nur was dann damit machen?" ist eine ziemlich blöde Antwort.
Warum? Wenn der picture.datatype damit nichts anfangen kann, muß/kann ich den Alpha-Kanal auch nicht berücksichtigen.
Zitat:
Ich könnte das sehr gut gebrauchen und muss auf 68K die Maske immer als zusätzliche Datei speichern. AROS kann das ja und so schwierig das in 68 zu implementieren kann das wohl auch nicht sein.
Ich bezweifle auch nicht, das ALPHA nutzlos ist. Ich weis nur nicht, wie ein DT diese Information weitergeben soll bzw. behandeln soll, da meines Wissens PBPAFMT_ARGB nicht unterstützt wird.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:30 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Original von bubblebobble:
Wenn das AROS picture.datatype das auch kann, könnte man das doch evtl. für OS3.x kompilieren, oder nicht?

Möglicherweise. Nur mußt Du dem garantiert noch beibringen CyberGraphics Funktionen zu verwenden. Ich vermute, das wäre eine schwieriges Unterfangen.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:38 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von gni:
Welcher picture.datatype unterstützt PBPAFMT_ARGB?


Was meinst du mit unterstützt PBAFMT_ARGB?, also aufrufen kann ich das immer und bekomme auch ein 32 Bit Image heraus nur ist dann das Alpha==0, also Sinnlos. Auf AROS liefert das Picture datatype allerdings schon ein echtes ARGB Format mit Alphakanal. Mein Programm würde sonst auch nicht laufen!

Zitat:
Ich bezweifle auch nicht, das ALPHA nutzlos ist. Ich weis nur nicht, wie ein DT diese Information weitergeben soll bzw. behandeln soll, da meines Wissens PBPAFMT_ARGB nicht unterstützt wird.

Hoffe zuerst einmal dass du dich verschrieben hast, andererseites s.O. geliefert wird ARGB mit A=0, so schwer zu sein dürfte es doch wirklich nicht auch das Alpha zu liefern, aber warum wird das nicht gemacht? Alpha gibt's schon seit zig Jahren.


[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:43 Uhr

bubblebobble
Posts: 707
Nutzer
@DariusBrewka:
Ist das dann die Schuld des PNG Datatypes oder der picture.datatype,
dass der Alpha zu Null gesetzt wird ?
Mein PNG Datatype liest den Alpha Kanal, das kann mandaran erkennen,
dass Multiview die "transpatenten" Teile des Bilder schwarz macht.
Nur wird dieser Alphakanal eben nicht an die Bitmap weitergereicht.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:45 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von gni:
Möglicherweise. Nur mußt Du dem garantiert noch beibringen CyberGraphics Funktionen zu verwenden. Ich vermute, das wäre eine schwieriges Unterfangen.


hmm, weder CGX noch P96 unterstützen auf 68k Alpha, aber für DoMethod(...ReadPixels, ..FMT_ARGB32) braucht man dass nicht und den Alphakanal auch in DoMethod(..DRAW)) einzubeziehen ist nun wirklich nicht so schwer. Ich weiss wirklich nicht warum das nicht gemacht wurde,

ggf sollte man sich wirkich an das AROS picture datatype setzen und es für 68k compilieren?


[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 17:54 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
@DariusBrewka:
Ist das dann die Schuld des PNG Datatypes oder der picture.datatype,
dass der Alpha zu Null gesetzt wird ?
Mein PNG Datatype liest den Alpha Kanal, das kann mandaran erkennen,
dass Multiview die "transpatenten" Teile des Bilder schwarz macht.
Nur wird dieser Alphakanal eben nicht an die Bitmap weitergereicht.


also ich denke wenn das png.datatype alpha liesst dann muss es ein Problem des picture.datatypes sein, ich habe ja vorhin auch das WarpPNG.datatype installiert und habe mich gefreut, leider ging es aber auch nicht.

Andererseits bedeutet ein schwarzer Hintergrund auch nicht das Alpha geladen wurde, es kann einfach nur der Hintergrund schwarz sein, da ja die Alpha Werte für diese auszumaskierenden Pixel 0 sind und es dann keinen Sinn machen würe anderes als 0x000000 für ARGB zu nehmen, ausser man möchte das das File nicht so gut gepackt wird. Und dieses 0 für RGB ist halt dann Schwarz.


[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 18:04 Uhr

Anjis
Posts: 8
Nutzer
@DariusBrewka:

Hallo Darius :-)

Ich würde mich sehr freuen wenn Du mir hierzu was sagen könntest.

http://www.amiga-news.de/forum/thread.php3?id=18459&BoardID=1


Vielen Dank

Anjis

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 18:06 Uhr

bubblebobble
Posts: 707
Nutzer
@DariusBrewka:
Nein, die PNG Datei hat einen ganz normalen Hintergrund mit
verschiedenen Farben. Es gibt ein Vordergrundobjekt, was ich mit der Alphamaske als sichtbar (A=255) definiert habe und den Hitnergrund als transparent (A=0).
Wenn ich das Bild jetzt mit Multiview anzeigen lassen, dann wurde der
ehemals Farbige Hintergrund in Schwarz gefadet, je nach Alpha Wert eben. D.h. das Datatype hat definitiv die Alpha Maske geladen und das Bild auf einen Schwarzen Hintergrund unter berücksichtigung der Alphamaske geblittet. Nur die Maske ansich bekomme ich eben nicht.
Bei dem kürzlich erschienen DT kann man das einstellen (USE, DISCARD und KEEP).

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 19:53 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@bubblebobble

OK, sagen wir es geht (noch) nicht, ich habe ja darum auch früher die Masken als externe Datei geladen. Ggf. wenn du Powericons installiert hast und die PNGs in xyz.info umnennen kannst kannst du über die icon.library die dateien laden oder über die scalos iconobject.library? ist nicht allzu schwer, dann kannst du Provisorisch dein Program weitermachen und später dann auf datatype umstellen.

Sowohl mit der icon.lib als auch iconobject.library+datatypes kannst du sowohl die PNGs mit Alphakanal malen als auch die ARGB daten erhalten.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 20:19 Uhr

bubblebobble
Posts: 707
Nutzer
Hast du beispiel Code Schnipsel wie ich aus dem icon
eine Bitmap mache ?
Ist man wirklich gezwungen, die Datei in .info umzubenennen oder
geht das irgendwie anders ?
Allerdings muss man PNGIcons installiert haben, richtig ?

Ich glaube fast, ich werde einen eigenen Alpha Loader schreiben müssen. Oder gibt es ein Shell Tool was Alphakanäle extrahieren kann ?
Dann könnte man das beim start immer über das Grafik Verzeichnis
laufen lassen, und so wie Alphamasken automatisch akutell halten.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 21:03 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Zitat:
bubblebobble:
Wie machen das die PNG Icons ?

Vermutlich mit einer eigenen Laderoutine, die die libpng direkt benutzt.
Nichtmal das, also zumindest im Falle von PowerIcons. Das benutzt eigene Laderoutinen, die besser optimiert sein sollen, dafür aber auch nicht alle png-typen unterstützen.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 21:14 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Hast du beispiel Code Schnipsel wie ich aus dem icon
eine Bitmap mache ?


aus einem icon eine Bitmap zu machen ist keine wirkliche Kunst.

Speicher für einen Rastport erzeugen, eine Bitmap allokieren mit format ARGB, die Bitmap an den Rastport hängen und dann mittels Drawiconstate(...) hineinzeichnen, allerdings wist du damit auch keine Alphachannels bekommen die du weiterbearbeiten kannst, das Icon wird aber mit dem Hintergrund in der Bitmap die du an den RastPort anhängst verknüpft. Willst du das Image nur zeichnen oder wirklich weiterbearbeiten?, bei ersterem brauchst du nicht wirklich viel, einfach dass Icon laden und mittels DrawIconState() zeichnen.

Brauchst du die Daten incl. Alpha dann ist es auch nicht so schwer, da sowohl der Powericons Patch die icon.lib so patcht, als auch iconobject (Scalos), dass du diese Daten erhälst (im Format ARGB32), daraus eine Bitmap zu machen sollte auch nicht so schwer sein, leider wirst du davon nichts haben, da keine Funktion die Alpha Werte benutzt.

Zitat:
Ist man wirklich gezwungen, die Datei in .info umzubenennen oder
geht das irgendwie anders ?


ja, da die icon.library das ".info" selber dranhängt und sich davon nicht abhalten lässt.

Zitat:
Allerdings muss man PNGIcons installiert haben, richtig ?

PowerIcons!, dann hat man aber die schönen Png icons incl.

Zitat:
Ich glaube fast, ich werde einen eigenen Alpha Loader schreiben müssen.

sieht so aus, andererseits von wem stammt denn das pictue.datatype oder gibt es davon auch private (nicht C=, Haage&Partner...) versionen. Dann könnte man dort anfragen.


[/quote]


[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 21:28 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von bubblebobble:
Ist das dann die Schuld des PNG Datatypes oder der picture.datatype,
dass der Alpha zu Null gesetzt wird ?
Mein PNG Datatype liest den Alpha Kanal, das kann mandaran erkennen,
dass Multiview die "transpatenten" Teile des Bilder schwarz macht.
Nur wird dieser Alphakanal eben nicht an die Bitmap weitergereicht.

Also, erstmal wäre es ziemlich sinnlos, wenn die datatypes.library hingehen würde, sich vom png.datatype die ARGB-Daten holen würde, um dann den A-Teil mit nullen zu füllen. Außerdem könntest Du ja, wenn das wirklich so wäre, einfach den Request direkt an das datatype schicken, ohne überhaupt mit der library zu reden.
Wahrscheinlicher ist es, daß sich die library RGB-Daten von png-datatype holt und dann nach ARGB konvertiert.
Wenn die Schnittstelle Datatype und der Library keinen anderen Austausch zuläßt, nützt es nix, wenn das Datatype die Alpha-Werte vorhält.
Das Zeichnen in eine BitMap ist ein ganz anderer Request.

Du kannst natürlich das Bild einmal in eine schwarz vorinitialisierte BitMap und danach in eine weiße BitMap blitten und die Differenz ermitteln...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ Dieser Beitrag wurde von Holger am 15.08.2005 um 21:30 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 22:40 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Original von DariusBrewka:

ggf sollte man sich wirkich an das AROS picture datatype setzen und es für 68k compilieren?


Nicht unbedingt empfehlenswert, weil es bei dem an anderen Stellen noch mangelt. Wie unimplementierte Features. Oder v43 <-> pre-v43 Kompatibilität-Kram (wenn ein datatype die daten an picture.datatype im v43 modus weitergibt aber ne app darauf im pre-v43 modus zugreift).



[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 22:50 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Original von bubblebobble:
Gibt es die als Amiga Shared Lib mit Doku irgendwo ?


Mit libpng coden (Bilder laden/speichern) ist extrem einfach. Unter Linux wird under der man page von libpng genau und Schritt für Schritt beschrieben wie man das macht.

Ansonsten kann man sich auch den Source vom AROS png.datatype anschauen, der auf libpng basiert. Der hat außerdem noch ein paar zusätzliche Funktionen um mit sehr wenigen Code Zeilen ein PNG File in einen ARGB Buffer zu laden. Diese Funktionen werden von der icon.library zum laden von PNG Icons verwendet (= ohne datatype overhead).

[ - Antworten - Zitieren - Direktlink - ]

15.08.2005, 23:17 Uhr

bubblebobble
Posts: 707
Nutzer
Ich habe die Datatypes noch nicht ganz aufgegeben.

Wie kann ich aus einem Datatype Object eine Bitmap,
am besten ein simples PixelArray herausquetschen ?

Es war die Rede von PDTM_READPIXELARRAY in Kombination
mit PBFMT_ARGB. Kann da jemand etwas genaueres posten,
etwa den entpsrechenden Aufruf mit DoDTMethod ?

Ich sehe gute chancen, dass das Datatype dann die Alphamaske
tatsächlich mit herausgibt.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 00:04 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Original von bubblebobble:

Es war die Rede von PDTM_READPIXELARRAY in Kombination
mit PBFMT_ARGB. Kann da jemand etwas genaueres posten,
etwa den entpsrechenden Aufruf mit Do
Ich sehe gute chancen, dass das Datatype dann die Alphamaske
tatsächlich mit herausgibt.


Vom guigfx source:

NewDTObject(file_name, PDTA_DestMode, PMODE_V43,
DTA_SourceType, DTST_FILE,
DTA_GroupID, GID_PICTURE,
PDTA_Remap, FALSE, TAG_DONE)
[...]

GetDTAttrs(obj, PDTA_ModeID, (IPTR)&displayID,
PDTA_BitMapHeader, (IPTR)&bmhd,
TAG_DONE)

[...]

wenn bmhd->bmh_Depth > 8:

if ((pic.array = AllocRenderVec(MemHandler, 4 * pic.width * pic.height)))
{
DoMethod(obj, PDTM_READPIXELARRAY, (IPTR)pic.array,
RECTFMT_ARGB, pic.width * 4,
0,0, pic.width, pic.height);
}

[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 00:46 Uhr

bubblebobble
Posts: 707
Nutzer
@Georg:

Ich mache das eigneltich sehr ähnlich,
aber mein Rechner stürzt gnadenlos ab bei DoDTMethod:

Hier der Code (leider AB2, ich hoffe das ist verständlich):
code:
*DTPic._Object = NewDTObjectA_ (&filename.s,Tags(#DTA_GroupID,#GID_PICTURE ))
If *DTPic
  GetDTAttrsA_ *DTPic,Tags(#PDTA_BitMapHeader,&*bmhdp)
  temp.l = AllocMem_(*bmhd\bmh_Width * *bmhd\bmh_Height*4,0)

  DTM\MethodID            = #PDTM_READPIXELARRAY
  DTM\pbpa_PixelData      = temp          ; /* The pixel data to transfer to/from */
  DTM\pbpa_PixelFormat    = #RECTFMT_ARGB ; #PBPAFMT_ARGB  ; /* Format of the pixel data (see "Pixel Formats" below) */
  DTM\pbpa_PixelArrayMod  = *bmhd\bmh_Width*4; /* Number of bytes per row */
  DTM\pbpa_Left           = 0              ; /* Left edge of the rectangle to transfer pixels to/from */
  DTM\pbpa_Top            = 0              ; /* Top edge of the rectangle to transfer pixels to/from */
  DTM\pbpa_Width          = *bmhd\bmh_Width ; /* Width of the rectangle to transfer pixels to/from */
  DTM\pbpa_Height         = *bmhd\bmh_Height

  DoDTMethodA_ *DTPic,0,0,DTM

  ...

Sieht da jemand was ich falsch mache ? Habe schon alles Mögliche probiert.
Die Breite und Höhe (*bmhd\bmh_width) stimmen, also wird das Bild wohl korrekt
geöffnet.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 08:11 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Also ich habe ja vor einiger Zeit eine lib gemacht, die genau dieses macht für mein Programm (wird aber nicht benutzt, da ich diese Funktionen auch intern habe), das einzige was fehlt sind die fd files um daraus Includes für die Verschiedenen Compiler zu erstellen.

Später habe ich noch kleine Fehler gefunden, die kann ich aber sicherlich schnell beheben.

Diese hat folgende Funktionen (der APTR Parameter am Anfang ist ein Memorypool, wo der Speicher alloziiert werden soll).

code:
void DisposeImageContainer(APTR, struct NewImage *);
void DrawAlphaImageToRP(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD);
void DrawAlphaDisabledImageToRP(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD);
void DrawTileToRP(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD, UWORD, UWORD);
void DrawImageToRPScaled(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD, UWORD, UWORD, UWORD, UWORD, UWORD, UWORD);
void DrawImageToRP(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD);
void PutImageToRP(APTR, struct RastPort *, struct NewImage *, UWORD, UWORD);
struct NewImage *NewImageContainer(APTR, UWORD, UWORD);
struct NewImage *GetImageFromRP(APTR, struct RastPort *, UWORD, UWORD, UWORD, UWORD);
struct NewImage *GetImageFromFile(APTR, char *);
BOOL ScaleImageToImage(APTR, struct NewImage *, struct NewImage *);
void  SetImage(APTR, struct NewImage *, ULONG);
void  MixImage(APTR, struct NewImage *, struct NewImage *, UWORD, UWORD, UWORD, UWORD, UWORD);
void BlurSourceTintAndMixTexture(APTR, struct NewImage *, struct NewImage *, UWORD, ULONG);
void TintImage50(APTR, struct NewImage *, ULONG);


NewImage ist eine kleine Struktur, die nur die breite und höhe des Images enthält und die Daten selber, sonst praktisch nichts,

Die DrawAlphaImageToRP funktion braucht viel Speicher, da diese zuerst den Bildhintergrund einliest, ihn mit dem Bild verknüpft und wieder zurückschreibt (war halt nur für kleine Iages gedacht).

gruss.

Darius

[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 08:32 Uhr

thomas
Posts: 7716
Nutzer
@bubblebobble:
Zitat:
Sieht da jemand was ich falsch mache ?

Ich weiß nicht genau, was das für eine Sprachs ist, aber aus dem Rest der da steht, würde ich sagen, du mußt entweder
code:
DoDTMethodA_ *DTPic,0,0,&DTM

oder
code:
DoDTMethod_ *DTPic,0,0,DTM

benutzen, weil DTM offenbar kein Pointer ist, sondern die Struktur selber. DoDTMethodA braucht aber einen Pointer auf die Methode.

Wie sieht denn dein Aufruf von DTM_PROCLAYOUT aus ?

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 10:01 Uhr

bubblebobble
Posts: 707
Nutzer
@Darius
Die Lib wäre natürlich interessant, wenn man tatsächlich an
den Alphachannel kommt.
Allerdings habe ich selbst eine Bibliothek mit vielen Befehlen zum Blitten geschieben, die keinen MEmory overhead hat, sondern
die Daten direkt auf der Graka mischt. (Evtl. ist das langsamer)
(wahlweise mit Maske, scaliert, mit Alpha, Add (für Lichteffekte), Sub (für Schatten), beliebig Transparent etc.
Das einzige was mir fehlt sind die Daten der Alphamaske eines .iff oder .png.
Würdest du mir verraten wie du die Daten aus dem Datatype bekommst,
oder machst du das anders ?

DPM ist eine Structure vom Typ pdtBlitPixelArray. Wenn man DTM schreibt, ist das gleichwertig mit &DTM, also ein Pointer auf das erste Element der Structur, in dem Fall MethodID.

> Wie sieht denn dein Aufruf von DTM_PROCLAYOUT aus ?
Das rufe ich überhaupt nicht auf.
Ich mache nur das, was ich oben gepostet habe.
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 10:30 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Original von bubblebobble:
@Georg:

Ich mache das eigneltich sehr ähnlich,
aber mein Rechner stürzt gnadenlos ab bei DoDTMethod:


Ruf mal die PDTM_READPIXELARRAY Methode mit DoMethod
auf, anstatt DoDtMethod. DoDtMethod benutzt man sonst,
wenn das DataType Objekt schon an ein Fenster gehängt
ist.




[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 10:47 Uhr

gni
Posts: 1106
Nutzer
Zitat:
DariusBrewka:
Zitat:
gni:
Welcher picture.datatype unterstützt PBPAFMT_ARGB?

Was meinst du mit unterstützt PBAFMT_ARGB?, also aufrufen kann ich das immer und bekomme auch ein 32 Bit Image heraus nur ist dann das Alpha==0, also Sinnlos.
Ich meinte, das der picture.datatype dieses Format auch verarbeiten kann und nicht auf _RGB besteht.
Zitat:
Zitat:
Ich bezweifle auch nicht, das ALPHA nutzlos ist. Ich weis nur nicht, wie ein DT diese Information weitergeben soll bzw. behandeln soll, da meines Wissens PBPAFMT_ARGB nicht unterstützt wird.
Hoffe zuerst einmal dass du dich verschrieben hast
Sollte natürlich heissen, das Alpha nicht nutzlos ist...

[ - Antworten - Zitieren - Direktlink - ]

16.08.2005, 10:53 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Georg:
Ansonsten kann man sich auch den Source vom AROS png.datatype anschauen, der auf libpng basiert.

Hast Du auch einen Link?

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 3 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Alphamaske aus PNG und IFF laden [ - Suche - Neue Beiträge - Registrieren - Login - ]


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