ugrás a tartalomhoz

Flex actionscript problema

lacaaa · 2011. Ápr. 5. (K), 11.07
Sziasztok lenne egy kerdesem flex illetve actionscript be.

Az lenne a kerdesem hogy van egy bmp kepem es at szeretnem konvertalni png-nek hogy tudjam megjeleniteni flex be image tag segitsegevel mivel az image tag nem tudja megjeleniteni a bmp kepet ezert at kene alakitsam.

Az a problemam hogy a kep csak 8 bites es nem tudom atalakitani sehogyan sem.

az atalakitasat a kovetkezo keppen probaltam meg :
var file1:File=File(File.applicationDirectory.resolvePath("images\\image.bmp"));
    /*if (!f.exists)
		return;*/
	var fileInStream:FileStream=new FileStream();
	fileInStream.open(file1, FileMode.READ);
	fileInStream.readBytes(PngByteArray);

PNG=Pngenc.encodeByteArray(PngByteArray,100,100);
	var file:File=new File(File.applicationDirectory.resolvePath("images\\image.png").nativePath.toString());
	
	try
	{
	fileInStream.open(file,FileMode.WRITE);
	fileInStream.writeBytes(PNG,0,PNG.length);
	fileInStream.close();
	}
	catch(e)
	{
	mx.controls.Alert.show("File write error");
	}

Az a baj hogy a 8 sorban a kovetkezo hibaval ter vissza

Error: Error #2030: End of file was encountered.
at flash.utils::ByteArray/readUnsignedInt()

Az lenne a kerdesem hogy ez a hiba azert vane mert nem tud nyolc bites kepet atalakitani a PngEncoder?

Ha esetleg ez igy nem mukodod kepes akkor tudnatoke mondani egy megoldast hogy a PngByteArray ben levo adatot hogyan tudnam atrakni egy bitmapdata ba hogy azt atkonvertalhassam png nek?
 
1

PNG

Poetro · 2011. Ápr. 5. (K), 11.56
Mivel a BMP képet PNG-ként olvasod, ne is csodálkozz, hogy hibát fog dobni. Előbb a képet át kellene alakítani PNG-vé, hogy PNG-ként tudd olvasni. Például még a Flex alkalmazás indítása előtt átalakítod a képeket PNG-vé egy külső alkalmazás segítségével, létezik rá több tucat, például OptiPNG.

Amennyiben mindenképpen Flex alatt akarod megoldani a konvertálást, akkor használhatod a következőket: Parsing and displaying BMP files via ActionScript vagy Using BMPDecoder class to Load an External BMP File(RLE Compression Support). Természetesen ez nagyon messze van az optimálistól, elvégre az ActionScript és a Flex nem igazán erre való.
2

flex

lacaaa · 2011. Ápr. 5. (K), 12.12
Koszi a valaszt a problemam az hogy nem tudom atalakitani kulsoleg a fajt mert egy olyan fajl rol van szo ami valtozik es a program futatasa kozbe jon letreezert programba kell atalakitani.

meg mielott a fajlot bmp formatumba irnam kapok egy bin kiterjesztesu fajlot abbol hogyan lehetne png tcsinalni?
3

Alkalmazás

Poetro · 2011. Ápr. 5. (K), 12.27
Amennyiben desktop alkalmazásról van szó, akkor tudtommal meg lehet hívni Flex-ben is külső alkalmazást, ami megcsinálja neked az átalakítást. Az, hogy mi egy fájl kiterjesztése, semmit nem mond el arról, hogy mi a tartalma. Jó lenne tudni, hogy maga a fájl milyen típusú, erre hasznos lehet a Unix-szerű rendszerek file parancsa.

Off: lemaradt a billentyűzetedről a vessző karakter? Mert ha nem, érdemes lenne használni.
4

flex

lacaaa · 2011. Ápr. 5. (K), 12.51
A bin fajbol jon letre a bmp fajl. nekem van a bytearray-em amibe benne van a bin faj tartalma azt szeretnem atkonvertalni ugy hogy kapjak egy png filot.

Bitmapdata ba nem lehet valahogy beolvastatni a Bytearray tartalmat mert azt mar lehetne konvertalni a pngencoder segitsegevel?
5

Lehet

Poetro · 2011. Ápr. 5. (K), 12.58
Csak akkor lehet, ha abban már eleve képinformáció van. Olvasd el, milyen formátumban kell lennie a képnek, hogy a BitmapData megegye. Ajánlom figyelmedbe a writeUnsignedInt és setPixels függvényeket.
6

igen

lacaaa · 2011. Ápr. 5. (K), 13.32
Igen kepinformacio van benne mit csinal pontosan a setpixels metodus ?

atkonvertalja a bytearray-t bitmapdata ba?
7

Elolvastad?

Poetro · 2011. Ápr. 5. (K), 13.49
Ha elolvastad (ugye elolvastad?), akkor kiderül, hogy a ByteArray tartalmazza a pixelek szín és átlátszóság információját 32 bites unsigned int (4 bájt) formában. Azaz ezen a tömbön végigmenve megkapjuk az összes pixel információját. Ha például a képünk 10x10 pixeles, akkor az első 10 32 bites unsigned int tartalmazza az első sor pixeleinek információját, a következő 10 a második sorét és így tovább. A 32 bites unsigned int a következő képpen épül fel: az első bájt az átlátszóságot (A) határozza meg, a második a vörös (R), a harmadik a zöld (G) és a negyedik a kék (B). Ezért nevezik ezt ARGB-nek. Amennyiben az adatod nem ilyen formában van, akkor át kell alakítani.

atkonvertalja a bytearray-t bitmapdata ba?

Igen, pontosan ezt csinálja, amennyiben a ByteArray a megfelelő formában van.