ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Animgif via Datatype? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
18.05.2009, 12:47 Uhr MaikG Posts: 5172 Nutzer |
Ich würde gerne Animierte gif's darstellen können. Nun habe ich zum testen ob das überhaupt geht Aweb mal auf Datatypes gestellt. Der DT von OS3.9 und Akgif bringen leider nur unbewegte Bilder hervor. Kann Aweb nur nicht richtig damit umgehen oder ist es generell nicht möglich? [ - Antworten - Zitieren - Direktlink - ] |
18.05.2009, 13:00 Uhr thomas Posts: 7718 Nutzer |
Anim-GIFs ist ein bißchen schwierig. Es gibt einen Animations-Datatype, mit dem z.B. IFF-Anims gelesen werden können. Es gibt auch eine GIFANIM-Klasse, die auf diese Weise IFF-Anims anzeigt. Damit kann nur leider außer Multiview kein Programm etwas anfangen. Die andere Möglichkeit, ist es, die GIF-Anim als Bilddatei mit mehreren Seiten zu laden. Seit OS 3.5 gibt es die Tags PDTA_GetNumPictures und PDTA_WhichPicture, mit denen man die Anzahl Einzelbilder ermitteln und ein Einzelbild auswählen kann. Die Tags funktionieren auch unter OS 3.1, wenn man ein GIF-Datatype installiert, das die Tags unterstützt. Mit dieser Methode verliert man natürlich die Timings, die u.U. in der Animation gespeichert sind. Aber dafür ist es relativ einfach, die Animation zu laden und anzuzeigen. PicShow macht das z.B. so. Soweit ich weiß, kann kein Browser Animationen mit Datatypes laden. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
18.05.2009, 13:19 Uhr MaikG Posts: 5172 Nutzer |
Zitat: Das Klingt eigentlich ganz gut, die Einzelbilder würden mir reichen. Ich denke die Timings werde ich manuell extrahieren können. Muss nur noch ein Gif Datatype existieren der das beherscht. [ - Antworten - Zitieren - Direktlink - ] |
18.05.2009, 13:37 Uhr MaikG Posts: 5172 Nutzer |
Wenn ich mir PDTA_GetNumPictures hole kommt da bei Ak und den OS3.9 gif datatype 0 zurück Das holt man doch dort an der Stelle bei PDTA_Bitmap und PDTA_BitmapHeader? Sonst wüsste ich kein Datatype welchen ich probieren sollte, WarpDT hat scheinbar kein Gif dabei. Ansonsten müsste ich probieren das Gif selbst zu Zerlegen, dem 2.Bild usw. den 1. Header vorsetzen. Weiss nur nicht ob das so einfach funktioniert. [ - Antworten - Zitieren - Direktlink - ] |
18.05.2009, 14:19 Uhr thomas Posts: 7718 Nutzer |
@MaikG:Zitat: Nein, beim NewDTObject. In den Autodocs ist ein Beispiel. Mit dem OS 3.9-Datatype funktioniert das auf jeden Fall. Das wird z.B. bei dem AnimIcon-Programm aus dem Christmas-Update benutzt. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
18.05.2009, 16:27 Uhr Der_Wanderer Posts: 1229 Nutzer |
Siehe auch im Amiblitz3 Code: SourcecodesIncludesimage.include.bb2image_LoadViaDT{image.l,filename.s,imgnum.l} imgnum ist dann die entsprechende Nummer, und siehe SourcecodesIncludesimage.include.bb2image_Examine{filename.s} wie man herausbekommt, wie viele Frames es überhaupt gibt. ... oder eben wie immer, gleich Amiblitz3 benutzen ;-) -- HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 18.05.2009 um 16:28 Uhr geändert. ] [ Dieser Beitrag wurde von Der_Wanderer am 18.05.2009 um 16:28 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 10:54 Uhr MaikG Posts: 5172 Nutzer |
Zitat: Danke, das funktioniert schonmal mit einigen gifs. Nur gibt es jetzt auch spezielle die Speichersparender arbeiten. Wo das nächste bild nur ein Ausschnitt des vorherigen ist. Wenn ich das jetzt richtig beachte(Dieses AnimIcon tut dies nicht) sieht die Anim eigenarig aus. Ich glaube ich benötige eine Art Transparenz, denn es scheint so als sei die nicht vorhanden. Wie geht das oder gehts gar nicht? [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 11:42 Uhr thomas Posts: 7718 Nutzer |
@MaikG: Transparenz gibt es bei Datatypes leider nicht. Aber die Position, wo der Ausschnitt im Bild hingehört, ist im BitMapHeader enthalten. Hier ist ein Beispiel, das das berücksichtigt: http://thomas-rapp.homepage.t-online.de/examples/dtanim.c Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 12:20 Uhr MaikG Posts: 5172 Nutzer |
Zitat: Die Positionierung hab ich schon ferig. Man muss doch die Hintergrundfarbe irgendwie Transparent bekommen. Bei BltBitmap gibt es doch solche 0x0c sachen, kann davon keine Option sowas? PlayCD liesst z.B. über Datatypes und kann Transparent man merkt es wenn man den Skin umwandelt in ein Format dessen Datatype keine Transparenz beherrscht. [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 13:22 Uhr whose Posts: 2156 Nutzer |
@thomas: War es nicht eher so, daß Datatypes i.A. durchaus Transparenz beherrschen, das Ganze aber an fehlerhaften Versionen des picture.datatype scheiterte, welche die Transparenzinformationen nicht durchreichten bzw. Alpha-Informationen einfach durch Festwerte ersetzten? Ich entsinne mich an ein Dokument von Andreas Kleinert, in dem diese Problematik angesprochen wurde, weiß jetzt aber nicht aus dem Stegreif, welches Dokument das war. Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 14:07 Uhr thomas Posts: 7718 Nutzer |
@whose: Macht das einen Unterschied, wer dran Schuld ist ? Beim Programm kommt so oder so nichts an. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 14:07 Uhr MaikG Posts: 5172 Nutzer |
Ich hab den: picture.datatype 45.17 (19.03.02) Das 1. Bild kommt gut, das 2. scheint aber einzelne Pixel des 1. zu verwenden welche aber als weiss(Farbe 0) erscheinen. Also sind wohl mehrere Farben Transparent und sollten entsprechend nicht auf den Rastport geschrieben werden. Das einzige was mir noch einfallen würde wäre einen Filter zu schreiben der die Bilder sozusagen mixt. Nur ist das kompliziert und unter Basic lahm nehme ich an. Kann man BltBitmapRast nicht überreden die 0 Farbe nicht zu schreiben? [ Dieser Beitrag wurde von MaikG am 22.05.2009 um 14:07 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 14:10 Uhr thomas Posts: 7718 Nutzer |
@MaikG: Du könntest mal probieren, ob PDTA_MaskPlane irgendwas sinnvolles zurückgibt, das dann mit BltMaskBitMapRastPort verwendet werden kann. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 14:45 Uhr MaikG Posts: 5172 Nutzer |
Dort kommt nur immer 0 zurück. Aber BltMaskBitMapRastPort klingt Intressant, das extrahieren der Transparenten Farben direkt aus dem Gif wäre ja möglich. Wie beim Timing. [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 15:52 Uhr akl Posts: 265 Nutzer |
@MaikG: Generell sind Animations- und Bilddatypes zwei unterschiedliche Dinge. Man könnte das per intelligentem Descriptor auseinanderhalten, aber spätestens bei "GIF24" (s.u.) bricht das in sich zusammen. akGIF liefert Dir defaultmäßig nur das erste Bild - oder setzt aus einer nicht-animierten Einzelbildfolge ein 24 Bit-Bild zusammen ("GIF24"). Transparenzinformation wird für das Einzelbild als Index (für eine Farbe) oder als Alpha-Channel mitgeliefert. Leider sind die diversen picture-Datatype-Implementierungen, was Alpha Channel angeht, teilweise fehlerhaft - oder zumindest unterschiedlich im Verhalten. Über eine Konfigurationsoption des Datatypes kann man sich auch Einzelbilder holen (TILED_LOADING=ON, TILE_NUMBER=nnn) - aber dieses Gebastel würde ich niemandem empfehlen. Der Ansatz mit dem Blitten ist der richtige, allerdings ist es - zumindest bei akGIF - vermutlich am Einfachsten, wenn Du TRANSTOALPHA=ON setzt, und dann mit Cybergraphics-Funktionen arbeitest (echter Alpha-Channel). [ Dieser Beitrag wurde von akl am 22.05.2009 um 15:54 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 16:06 Uhr Der_Wanderer Posts: 1229 Nutzer |
@akl Seit wann gibt es in CGX Alpha Channel Funktionen? Oder meinst du Read/Write Pixelarray und per Hand mischen? -- HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 16:22 Uhr akl Posts: 265 Nutzer |
@Der_Wanderer: In einer oder mehrerer der Myriaden AmigaOS-Versionen, -Derivate und -Kopien gibt es WritePixelArrayAlpha() - und ein WritePixelArray() was damit nicht richtig umgeht. Ich will mich aber nicht zu weit aus dem Fenster lehnen. Im Grunde genommen ist es in 2009 kein Zustand, dass man sowas selber implementieren muss... [ - Antworten - Zitieren - Direktlink - ] |
22.05.2009, 16:45 Uhr MaikG Posts: 5172 Nutzer |
CGX hat doch Alphachannel ARGB oder? Also momentan gibt mir der DType die Einzelbilder, diese werden mit Readpixelarray gecached und mit WritePixelArray letztendlich im Loop wiedergegeben. Bei AGA dementsprechend ein 8 hinter den Funktionen. Dieses BltBitmapMaskRastport dings da irretiert mich, es ist die Rede von Planes, das Bild kommt aber in 24 Bit vom Datatype wegen dem Destmode. [ - Antworten - Zitieren - Direktlink - ] |
23.05.2009, 00:17 Uhr Wishmaster Posts: 140 Nutzer |
Bei Alfi git es die GifAnim-MCC http://alfie.altervista.org/ -- Pegasos MorphOS [ - Antworten - Zitieren - Direktlink - ] |
27.05.2009, 21:04 Uhr MaikG Posts: 5172 Nutzer |
Zitat: Ich weiss weder wie MUI Funktioniert noch hab ich die Basic Includes dafür. Ausserdem weiss ich nicht wie diese Klasse auf diese GIFs reagiert. So ich habe nun ein Filter geschrieben der das Weiss gegen Informationen aus dem Letzten Bild ersetzt. Problem ist nur es gibt >neues< Weiss welches tatsächlich Weiss dargestellt werden soll und nicht Transparent. Im ganzen sieht die Anim besser aus als vom DT aber immernoch teilweise falsch. Praktisch kann ich nicht unterscheiden ob Pixel XY nun Transparent soll oder nicht. [ - Antworten - Zitieren - Direktlink - ] |
28.05.2009, 08:04 Uhr akl Posts: 265 Nutzer |
@MaikG: DTM_WRITEPIXELARRAY liefert Dir auf Anfrage auf jeden Fall ARGB oder RGBA - mit Ausnahme irgendeiner pic-dt-Version, die das nicht fehlerfrei kann. [ - Antworten - Zitieren - Direktlink - ] |
29.05.2009, 10:47 Uhr MaikG Posts: 5172 Nutzer |
Zitat: Okay, also hab ich mir mal die Includes dazu gebastelt und folgendes gebaut. Stürzt leider nur ab und macht nichts weiter: code:Counter&=0 BildAnzahl&=1 First%=1 WHILE PCounter&<BildAnzahl& workbuf& = AllocVec& (1024, MEMF_PUBLIC& OR MEMF_CLEAR&) IF workbuf& THEN TAGLIST workbuf&, _ DTA_SourceType&, DTST_FILE&, _ DTA_GroupID&, GID_PICTURE&, _ PDTA_Screen&, mysc&, _ PDTA_DestMode&, 1&, _ PDTA_WhichPicture&, PCounter&, _ PDTA_GetNumPictures&, VARPTR(BildAnzahl&),_ TAG_END& dtobjekt& = NewDTObjectA& (SADD(Picture$ + CHR$(0)), workbuf&) IF dtobjekt& THEN gplayout& = AllocVec&(gpLayout_sizeof%, MEMF_PUBLIC& OR MEMF_CLEAR&) IF gplayout& THEN POKEL gplayout& + gpLayoutMethodID%, DTM_PROCLAYOUT& POKEL gplayout& + gpl_GInfo%, NULL& POKEL gplayout& + gpl_Initial%, TRUE& IF DoDTMethodA& (dtobjekt&, NULL&, NULL&, gplayout&) THEN TAGLIST workbuf&, _ PDTA_BitMapHeader&, VARPTR(bmheader&), _ PDTA_BitMap&, VARPTR(bitmapadr&), _ TAG_END& IF GetDTAttrsA& (dtobjekt&, workbuf&) = 2 THEN pwidth% = PEEKW(bmheader& + bmh_Width%):pheight% = PEEKW(bmheader& + bmh_Height%) pLeft% = PEEKW(bmheader& + bmh_Left%):ptop% = PEEKW(bmheader& + bmh_Top%) pdtBPA& = AllocVec&(sizeof_pdtBlitPixelArray%, MEMF_PUBLIC& OR MEMF_CLEAR&) IF pdtBPA& THEN posx%=92+pleft%:posy%=14+thetopborder%+ptop% IF first% THEN pdepth%=PEEKB(bmheader& + bmh_Depth%) Memsize&=pwidth%*pheight% Memsize&=((Memsize& * 4)+15) AND NOT 15 bpr&=((pwidth%*4)+15) AND NOT 15 first%=0:tempbm&=NULL& END IF PicFrameBuffer&(PCounter&) = 0& IF BildAnzahl&>1 AND PCounter&<200 THEN PicFrameBuffer&(PCounter&) = AllocVec&(Memsize&+4096, MEMF_PUBLIC& OR MEMF_CLEAR&) IF PicFrameBuffer&(PCounter&) THEN PicFrameX%(PCounter&)=posx%:PicFrameY%(PCounter&)=posy% PicFrameW%(PCounter&)=pwidth%:PicFrameH%(PCounter&)=pheight% TAGLIST pdtBPA&, _ PDTA_BitMapHeader&, VARPTR(bmheader&), _ PBPA_MethodID%, PDTM_WRITEPIXELARRAY&,_ pbpa_PixelData%, PicFrameBuffer&(PCounter&),_ pbpa_PixelFormat%, PBPAFMT_ARGB&,_ pbpa_PixelArrayMod%, bpr&,_ pbpa_Left%, 0,_ pbpa_Top%, 0,_ pbpa_Width%, pwidth%,_ pbpa_Height%,pheight%,_ TAG_END& junk&=DoSuperMethodA&(dtobjekt&,Null&, pdtBPA&) junk&=WritePixelArray& (PicFrameBuffer&(PCounter&),0,0,bpr&,rp&,PicFrameX%(PCounter&),PicFrameY%(PCounter&),PicFrameW%(PCounter&),PicFrameH%(PCounter&),RECTFMT_ARGB&) END IF END IF END IF END IF END IF FreeVec gplayout& END IF DisposeDTObject dtobjekt& END IF FreeVec workbuf& END IF INCR PCounter& WEND Was ist falsch? [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Animgif via Datatype? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |