2009-07-26 5 views
0

Ich möchte FileSteam.open() verwenden, um Bilddateien synchron von der Festplatte zu lesen. Ich kann sie dann mit readBytes() in ein ByteArray bringen, aber ich finde nicht, wie ich das in BitmapData bekomme. Ich weiß, Image kann es lesen wie es ist, aber ich brauche BitmapData.AS3/Air: PNG> Datei> FileStream> ByteArray> BitmapData

Irgendwelche Vorschläge?

+0

klingt spannend ... ich freue mich auf Ihre Ergebnisse ... :) – back2dos

+0

sehr cool ... irgendwelche Pläne für die Freigabe? Es wäre eine großartige Änderung sowohl für as3corelib als auch für hxformat ... Ich denke, Interlacing wird nicht wirklich benötigt ... soweit ich weiß, funktioniert das Laden oder Einbetten von verschachtelten PNGs auch nicht, also - außer Perfektionismus - warum erwartest du mehr? – back2dos

+0

Ich bin noch nicht fertig damit fertig zu werden ... ABER ich habe gesehen, dass es in Flash 11 eine neue asynchrone Laderoutine gibt, die auf diese Weise mehr Nische macht, als es bereits war, seit es bitmapData zu verarbeiten scheint. – grey

Antwort

5

im Paket flash.display verwenden Loader::loadBytes ... das wird Ihnen eine Bitmap und die BitmapData kann dann einfach durch Bitmap::bitmapData zugegriffen werden ... das macht die ganze asynchronen Betrieb, natürlich ... das einzige, was Sie tun könnten, schreiben, ist ein Decoder selbst ...

jetzt ein Encoder PNG ist in AS3, in der as3corelib und ich denke, es gibt auch andere, aber wahrscheinlich die meisten Leute hielten es für sinnlos, einen Decoder zu schreiben, Da Flash dies in seiner eigenen, und auch Codierung ist einfacher als Decodierung, weil Decodierung bedeutet, dass Sie das ganze Format implementieren müssen ... immer noch, können Sie es eine Schuß von Cours geben e ...

gut, Hoffnung, dass ...

greetz

back2dos

+0

Danke nochmal. :: sigh :: Also ich denke, es gibt keinen direkten Weg für mich, BitmapData synchron zu laden? – grey

+0

ich fürchte nein ... wenn du einen findest, sag es mir bitte ... :) kannst du immer hoffen, hxformat (http://code.google.com/p/hxformat/) wird es eines Tages endlich einbinden einen PNG - Decoder und kompiliere dann einen swc, den du in deinem Projekt verwenden kannst, aber bis dahin weiß ich nicht einmal, dass eine lib die Arbeit für dich erledigt ... oder vielleicht wird es eines Tages eine synchrone Version von 'geben Loader :: loadBytes' (was in einigen Szenarien wirklich SEHR cool wäre) ... trotzdem viel Glück ...;) – back2dos

+0

Ich verbrachte einen Tag mit einem PNG-Decoder. Habe das noch nie gemacht. Ich habe das meiste (unordentlich) gemacht, aber die Filterung aufzuheben ist etwas schwierig. Ich habe wichtigere Dinge, um Fortschritte zu machen, aber wenn ich Zeit habe, es später zu beenden, werde ich es euch wissen lassen. – grey

-1

Es Sinn haben hilft, weil Filestream arbeitet reine Daten zu verwalten, und BitmapData- arbeitet für Kompilierung oder decompile Daten .

Der Weg, den ich zu verwenden bin, ist, die Datei im Ursprung zu lesen und eine temporäre Datei in das Anwendungsverzeichnis zu schreiben, die von Loader-Klasse ohne Probleme erreicht werden kann.

Wünschen Sie mir Glück!

+0

Viel Glück! Lassen Sie es uns wissen, wenn Sie etwas Nützliches herausfinden. – grey

0

Diese Bibliothek auf GitHub hat einen PNGDecoder, der synchron arbeitet. Probieren Sie es aus:

https://github.com/terrynoya/ASImageLib

aus der Nutzung wiki:

var bytes:ByteArray = [PNG bytes]; 
var bmpData:BitmapData = new PNGDecoder().decode(bytes); 
this.addChild(new Bitmap(bmpData)); 

Aber ich kann mir vorstellen, mit der Klasse-in gebaut schneller wäre, und während es hängt von Ihrem Anwendungsfall Normalerweise wird asynchron beim Umgang mit UI-ähnlichen Bildern bevorzugt, um eine Blockierung des UI-Threads zu vermeiden (wodurch die App stottert). Aber es könnte einige Anwendungsfälle geben.