Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-11-2011, 09:17   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 119
Loader.loadBytes() Einschränkungen bzw. Lokale Bilder mit Übergröße Laden

Ich versuche den Benutzern die Möglichkeit zu bieten, lokal gespiecherte Bilder in eine Flash-Anwendung zu laden - diese Bilder sind meistens sehr groß, und überschreiten die bs FP10, typischen BitmapData Einschränkungen:

"8,191 pixels in width or height, and the total number of pixels cannot exceed 16,777,215 pixels"

Das Problem ist wohl mit FP11 verschwunden, aber um auch Zugriff auf die Bilddaten zu erhalten muss ich auf Loader.loadBytes zugreifen, was anscheinend für übergroße Bilder nicht funktioniert.

Hier Sample Code, könnt ihr as-is einfach in ein Frame einfügen:

PHP-Code:
import flash.net.FileReferenceList;
import flash.display.Bitmap;
import flash.display.BitmapData;
import com.adobe.images.JPGEncoder;

var 
_frl:FileReferenceList;
onAddButtonClicked()
function 
onAddButtonClicked(e:MouseEvent null):void {
    
trace("Opening file");
    
_frl = new FileReferenceList();
    
_frl.addEventListener(Event.SELECTonFilesSelected);
    
_frl.browse([new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)""*.jpg;*.jpeg;*.gif;*.png")]);
}

//When user has selected the files
 
function onFilesSelected(e:Event):void {
    for 
each (var item:FileReference in _frl.fileList) {
        
item.load();
        
item.addEventListener(Event.COMPLETEonFileLoaded);
    }
}

//When files are loaded into the application
 
function onFileLoaded(e:Event):void {
    
trace("File Loaded!");
    var 
jpg:JPGEncoder = new JPGEncoder(90);
    
    
    var 
loader:Loader = new Loader();
    
loader.contentLoaderInfo.addEventListener(Event.COMPLETEonBytesLoaded);
    
loader.loadBytes(e.target.data);
}

//When files are finally available as Loader/Image
 
function onBytesLoaded(e:Event):void {
    
addChild((e.target as LoaderInfo).loader);

Wenn jemand eine Idee oder Ansatz für einen work-around hat, oder weiss wodurch das Problem verursacht wird, wäre ich sehr dankbar.
elias2k3 ist offline   Mit Zitat antworten
Alt 29-11-2011, 09:41   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Wie Du schon angedeutet hast, ist das nicht nur einfach eine fiese Einschränkung der Loader-Klasse, sondern eine Beschränkung der Klasse BitmapData-Objekt. Deshalb ist es auch völlig wurscht, ob Du den Umweg über einen ByteArray nimmst und dieses dann an Loader übergibst, oder das Bild direkt mit der Loader-Klasse lädst. In beiden Fällen müsste ein BitmapData-instanziert werden und das ist in dieser Größe nicht möglich!

Du wirst daher nie das ganze Bild in nur einem BitmapData anzeigen können, sondern müsstest es auf mehrere (Kacheln) aufsplitten. Und da Du dafür logischerweise kein BitmapData verwenden kannst (Henne->Ei), müsste das auf ByteArray-Ebene geschehen.

Ergo:
Du musst Dir einen Low-Level-JPG-(oder was für ein Format auch immer Du laden willst)-Decoder programmieren (also quasi die Umkehrfunktion der JPGEncoders) und dann eine Bitmapverarbeitung auf ByteArray-Ebene vornehmen.

Das ist nicht ganz profan und sicherlich nicht so performant, wie der Flash-interene-Parser, aber sicher möglich...



P.S.:

Mir fällt gerade auf, dass wir das Thema hier schon mal diskutiert haben. Da die Faktenlage ja eigentlich unverändert ist, frag ich mich immer noch, wo Du derartig große Bilder herbekommst(?) und warum Du nicht einfach diesen Thread weiterführst?

...dann wüssten wir z.B., dass es auch mit einem ByteArray irgendwann zu Speicherproblemen kommen kann:
Zitat:
Zitat von elias2k3 Beitrag anzeigen
... bei größeren Bildern von ~8000x8000 pxl, bringt er mir aber dann einen Fehler:
PHP-Code:
ErrorError #1000: Nicht genügend Speicher vorhanden.
    
at flash.utils::ByteArray/set length() 
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (29-11-2011 um 09:54 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 29-11-2011, 10:06   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 119
Danke für deine Antwort Martin Kraft,
genau das selbe Problem hatte ich damals schon - dieses mal bin ich mit dem FP11 nur schonmal einen Schritt weiter - denn der hat keine BitmapData-Dimension Limitations mehr - Wofür ich SEHR DANKBAR BIN!
Nur war eben das Problem, dass ich trotzdem nicht auf die geladenen Bildinhalte zugreifen konnte, aber ich habe die Ursache des Problems nun gefunden...

Die Lösung des Problems:
Es schien Probleme mit meiner FP Version 11.0.XX zu geben. Ein Update auf FP Version 11.1 scheint das ganze gelöst zu haben.

Edit: Hier ging es eher um die Probleme die durch die Loader.loadBytes() verursacht wurden.

Geändert von elias2k3 (29-11-2011 um 10:11 Uhr)
elias2k3 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bilder mit Loader laden und Speichern Xenn ActionScript 3 3 20-02-2010 15:04
[Flash CS4] dynamisch Bilder per Loader laden I-LoVeRaP Flash Einsteiger 6 17-09-2009 08:26
Laden eines SWF mit .load() und .loadBytes() s.k ActionScript 3 0 12-05-2009 15:22
Loader: Laden mehrere Bilder überwachen grafgarf ActionScript 3 5 24-02-2009 19:18
jpeg mit übergröße laden gottmira Flash MX 2004 2 06-10-2005 14:00


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele