Flex/AIR/AS3/Component2010.06.23 08:11

프로젝트시 윈도우 형식의 시스템 트리를 사용할 경우가 생겨서 최대한 비슷하게 만들어보자는 생각으로 만들게된 콤포넌트입니다. 물론 아직 적용 못시킨것도 상당히 많습니다;;

요즘 일도 바쁘고 귀차니즘때문에 근 1년정도 업데이트를 못해서 차라리 공개하고 다른분들이 고쳐주시기를 바라는 마음에 쿨럭;; ㅋㅋ
그럼 소스 공개 하겠습니다. 공부 목적이시던 상용으로 사용하시던 전혀 상관 없습니다. 다만 다른곳에 소스를 재배포 하실때는 출처 한줄 적어주시면 감사할뿐입니다 ㅎㅎ;; 안적어주시면 할 수 없고요 ㅜ_ㅜ




※ Componets 에서 끌어다가 놓으실때 하드디스크의 내용을 읽느라 다소 시간이 걸릴 수 있습니다.
    멈췄다고 생각하지 마시고 잠시 기다리시길;;;

사용법은 따로 만들지 않았습니다. 사용법이 필요하신분들은 주석을 ASDoc 형태로 달아놓았으니 ASDoc 만드셔서 참고하세요~

저작자 표시 비영리
신고
Posted by 코멧'★
Adobe2010.06.03 09:55


Adobe AIR드디어 Adobe에서 안드로이드 2.2용 AIR를 발표했네요. 정말 기다리고 있었는데 오늘 Adobe에서 메일이 와서 확인해봤더니 드디어 나왔더군요. 예상했던건 6월 중순쯤이 되지 않을까 생각하고 있었는데 생각보다 훨씬 빠른 행보입니다. 공개되면서 예제 Application도 같이 공개가 되었는데 해당 Application을 보고 저도 빨리 적응을 해봐야겠네요.
 예상했던것처럼 ActionScript 1.0이나 2.0은 지원이 안되고 3.0만 지원됩니다.
지원되는 안드로이드 버전은 prerelease 버전에서는 Android 2.1 (Éclair) 와 Android 2.2 (FroYo) 버전을 지원하지만  released 버전에서는 2.2 FroYo만을 지원한다고 하는군요. 현재 테스트할 수 있는 기종은 Google Nexus One과 Motorola Droid라고 합니다.
Flash Player와 AIR의 Mobile에서의 차이점은
1. 보안 모델의 강화
2. 로컬 스토리지 데이터 이용
3. 오프라인과 온라인 상에서 보다 개선된 퍼포먼스와 신뢰성의 결과를 제공합니다.
4. GPS를 지원합니다.
5. 브라우져 기반 application에서 기존 일반적인 온라인 마켓 application과 비교하여 보다 좋은 수익모델과 쉬운 배포를 할 수 있습니다. (제대로 해석한거 맞나 ㅡ_ㅡ;;)

  • Enhanced application security models
  • Utilize locally stored data
  • Offline or online use cases which result improved performance and reliability
  • GPS support
  • More flexible distribution and monetization models for standalone applications through catalogs and online marketplaces compared to browser based applications

  • 원문 보러가기 : http://labs.adobe.com/technologies/air2/android/?trackingid=GXVPJ


    Use Flash Builder to develop AIR apps for Android
    플래시 빌더에서 Android용 AIR Application을 작성 소개 영상



    Use Flash Professional CS5 to develop AIR apps for Android
    플래시CS5에서 Android용 AIR Application을 작성 소개 영상


    Example Applications

    There are already several AIR applications for the Android OS developed in Adobe’s private beta (prerelease) built using ActionScript 3. Many of these applications have been converted from existing Flash applications enabling developers to reuse existing code and save days and weeks of rewriting code.

    Listed below are a few blog posts and videos from some our prerelease program developers who have created AIR for Android apps.

    Adobe AIR for Android Example Application

    Games

    Gold Strike

    Instructional

    SpriteABC

    Entertainment/Utilities

    The Producer
    저작자 표시 비영리
    신고
    Posted by 코멧'★
    Flex/AIR/AS3/ANT2009.10.21 13:07
    이번에는 Flash Builder Beta 2 에서 ANT로 ASDoc 문서를 만드는 법에 대해 알아보겠습니다.
    원래는 월요일날 올릴 생각이었는데 개인적인 사정으로 시골을 다녀오는 바람에 블로그에 소홀해 졌었네요 ㅜ_ㅜ

    우선 Flash Builder에 ANT가 설치 되어 있지 않다면 아래 글을 참고하셔서 ANT를 설치 해주시기 바랍니다~.

    2009/10/16 - [프로그래밍/Flex / ActionScript] - Flash Builder 4 Beta에서 ANT 사용하기

    지돌스타님의 블로그를 대부분 인용 ㅡ_ㅡ; 했습니다. 죄송 ;;; ㅎㅎ

    원본글 보기 - http://blog.jidolstar.com/505

    ANT로 ASDoc 문서를 만들기 위해서는 xml 파일을 만들어야 합니다.

    라이브러리 프로젝트 부분에 build 폴더를 만든 후 build.properties 파일과 build.xml 파일을 생성합니다.


    build.properties
    #-------------------------------------------------------------------------------
    # Properties
    #-------------------------------------------------------------------------------
    
    flex4sdk.dir = C:/Program Files/Adobe/Adobe Flash Builder Beta 2/sdks/4.0.0
    flex4sdk.bin.dir = ${flex4sdk.dir}/bin
    flex4sdk.air.dir = ${flex4sdk.dir}/frameworks/libs/air
    
    asdoc.exe = ${flex4sdk.bin.dir}/asdoc.exe
    
    src.dir = ${basedir}/src
    docs.dir = ${basedir}/docs
    

    flex4sdk.dir - flex sdk가 설치된 경로를 적어줍니다.
    flex4sdk.bin.dir - flex sdk의 bin 폴더의 경로를 적어줍니다.  (ANT의 환경 변수는 ${변수명} 으로 사용할 수 있습니다.)
    flex4sdk.air.dir - air 라이브러리가 있는 경로를 적어줍니다.

    asdoc.exe - asdoc 실행파일의 경로를 적어줍니다.

    src.dir - 소스 파일의 경로를 적어줍니다. ( ${basedir}은 build.xml 파일에 basedir에 설정된 경로를 의미합니다. )
    docs.dir - ASDoc 문서를 생성할 경로를 적어줍니다.

    (태그 안의 파라메타를 제외하고 태그명은 전부 소문자로 해주세요. 소문자로 적었는데도 자꾸 대문자로 변경이 되버리네요;;)
    build.xml
    
    
        
        
        
        	
        
        
        
        	
        
        
            
            
        
        	
        
        
            
                
                
                
                
                
                
            
        
    
        
        
            
            	
            	
            	
                
                
            	
                
            
        
    
    

    <project name="asdoc" basedir="../">

    build 폴더를 안에 build.properties 파일과 build.xml파일을 만들었다면 basedir을 ../로 지정합니다.

    <property file="./build/build.properties" />

    환경 설정 파일의 경로를 적어줍니다. ( basedir 이 "../" 이므로 ./build/build.properties 라고 적어줍니다. )

    <property name="window_title" value="Comet's library API Document"/>
    <property name="main_title" value="Comet's library"/>
    <property name="footer" value="2009 Comet @ All right reserved."/>

    window_title과 main_title, footer 속성을 따로 xml에서 지정해 주는 이유는 build.properties 파일에 설정할 경우
    한글이 제대로 나오지 않는 문제가 있어 build.xml 문서에서 따로 지정하여 줍니다. 만약 영문으로만 적을 경우
    build.properties 파일에
    window_title = Comet's library API Document
    이런식으로 적어주면 build.xml에서 따로 설정하실 필요가 없습니다.

    <!-- docs 폴더 삭제 후 다시 생성 -->
        <target name="asdoc_clean">
            <delete dir="${docs.dir}" failOnError="false" includeEmptyDirs="true"/>
            <mkdir dir="${docs.dir}"/>
        </target>

    docs 폴더를 삭제 후 다시 생성하는 이유는 기존에 만들어진 ASDoc 문서의 파일들이 남아있을 경우 새롭게 작성된 liberary와 내용이 다를 수 있기 때문에 폴더 전체를 삭제 후 다시 생성하게 작성합니다.

    <!-- flex용 ASDoc 만들기 -->
        <target name="create_asdoc_flex" depends="asdoc_clean">
            <exec executable="${asdoc.exe}" failOnError="true">
                <arg line='-doc-sources "${src.dir}"'/>
                <arg line='-source-path "${src.dir}"'/>
                <arg line='-window-title "${window_title}"'/>
                <arg line='-main-title "${main_title}"'/>
                <arg line='-footer "${footer}"'/>
                <arg line='-output "${docs.dir}"'/>
            </exec>
        </target>

        <!-- AIR용 ASDoc 만들기 -->
        <target name="create_asdoc_air" depends="asdoc_clean">
            <exec executable="${asdoc.exe}" failOnError="true">
                <arg line='-doc-sources "${src.dir}"'/>
                <arg line='-source-path "${src.dir}"'/>
                <arg line='-window-title "${window_title}"'/>
                <arg line='-main-title "${main_title}"'/>
                <arg line='-footer "${footer}"'/>
                <arg line='-output "${docs.dir}"'/>
                <arg line='-library-path+="${flex4sdk.air.dir}"'/>
            </exec>
        </target>

    Flex 와 AIR 용을 따로 만드는 이유는 AIR API는 AIR 라이브러리를 포함시켜 주어야 하기때문입니다.
    AIR 와 Flex의 차이점은 <arg line='-library-path+="${flex4sdk.air.dir}"'/> 차이입니다.

    이렇게 만들었다면 아래 그림과 같이 build.xml 파일을 Ant 창으로 드래그합니다.


    정상적으로 완료 되었다면 Ant 창에 다음 그림과 같이 나타납니다.


    위 그림과 같이 나왔다면 asdoc 옆의 화살표를 클릭하여 노드를 펼칩니다.


    이제 ASDoc 문서를 만들 패키지 또는 클래스가 Flex 냐 AIR냐에 따라 create_asdoc_flex 나 create_asdoc_air를 더블클릭 하시면
    Consol 창에 다음 그림과 같이 나타나면 ASDoc 문서가 build.properties에서 지정한 docs.dir 폴더에 생성됩니다.


    ( Console 창의 우측 상단 빨간색 네모가 회색으로 바끼면 ASDoc 문서 생성이 완료된 것입니다.)

    ASDoc 문서가 생성이 되었다면 이제 docs 폴더로 가셔서 index.html 파일을 더블 클릭하시면 생성된 ASDoc 파일을 보실 수 있습니다.




    완성~~

    관련글
    저작자 표시 비영리
    신고
    Posted by 코멧'★
    Flex/AIR/AS3/AIR2009.10.11 17:26

    [출처] - 오창훈님 블로그 (http://lovedev.tistory.com/)
    http://lovedev.tistory.com/trackback/498

    요즘 한참 파일을 바이트 단위로 읽어서 표현하는 방법에 대해 공부하던 중 오창훈님의 블로그에 올라와 있는 글을 보고
    발견한 내용입니다.

    BMP 파일을 읽는 예제
    package
    {
    	import flash.filesystem.File;
    	import flash.filesystem.FileStream;
    	import flash.filesystem.FileMode;
    
    	import flash.display.Sprite;
    	import flash.display.BitmapData;
    	import flash.display.Bitmap;
    	import flash.utils.Endian;
    
    	import flash.geom.Rectangle;
    
    	[SWF(width='550', height='400', backgroundColor='#FFFFFF', frameRate='12')]
    	public class BMPViewer extends Sprite
    	{
    		private static const MAGIC_NUMBER:String = "BM";
    		private static const BMP_DATA_OFFSET_POSITION:int = 0xA;
    		private static const WIDTH_POSITION:int = 0x12;
    		private static const HEIGHT_POSITION:int = 0x16;
    
    		public function BMPViewer()
    		{
    			loadBMP();
    			super();
    		}
    
    		/*
    			Loads and reads a 24 Bit bitmap file.
    			
    			Based on BMP info from:
    			http://en.wikipedia.org/wiki/BMP%5Ffile%5Fformat
    		*/
    		private function loadBMP():void
    		{
    			//Load BMP. This requires AIR.
    			//Use FileReference.browse for
    			//Flash Player
    			var bmpFile:File = new File("app:/image.bmp");
    			var fs:FileStream = new FileStream();
    
    			//BMP files are Little Endian, which means their
    			//least significant byte is first (right to left)
    			fs.endian = Endian.LITTLE_ENDIAN;
    
    			//open the file in READ mode
    			fs.open(bmpFile, FileMode.READ);
    
    			//check the first two bytes to make sure
    			//it is a valid BMP file
    			if(fs.readUTFBytes(2) != MAGIC_NUMBER)
    			{
    				trace("FAIL : NOT A BMP FILE");
    
    				//not a BMP file, close steam
    				//and exit
    				fs.close();
    				return;
    			}
    
    			//note, we could also grab the length from the 
    			//header and make sure the file was the correct
    			//length
    
    			//change the cursors position to the point
    			//in the header that contains the value / offset
    			//of where the actual bitmap data begins
    			//read in the 4 Bytes that contain the value
    			fs.position = BMP_DATA_OFFSET_POSITION;
    			var dataPosition:int = fs.readInt();
    
    			//set cursor position to where the BMP
    			//width is stored
    			fs.position = WIDTH_POSITION;
    
    			//read in the 4 Bytes that contain the width
    			var bmpWidth:int = fs.readInt();
    
    			//read in the 4 Bytes that contain the height
    			var bmpHeight:int = fs.readInt();
    
    			//set cursor to where the BMP pixel data begins
    			fs.position = dataPosition;
    
    			var row:int = 0;
    			var column:int = 0;
    
    			//every row length in a BMP file must bee a multiple
    			//of 4 (see the spec). So, we need to determine how much
    			//padding we need to add at the end of each line. 
    			var padding:int = (bmpWidth % 4);
    
    			//create a fixed length Vector to store the pixel
    			//values as we read them.
    			var pixels:Vector. = new Vector.(bmpWidth * bmpHeight, true);
    
    			//loop through data (rows and columns)
    			//note that data stored in BMP is backwards to Flash and is
    			//stored from bottom row up, not top row down.
    			//So we have to loop backwards
    			var counter:int = 0;
    			for(var i:int = bmpHeight; i > 0; i--)
    			{
    				for(var k:int = 0; k < bmpWidth; k++)
    				{
    
    					var position:int = ((i - 1) * bmpWidth) + k;
    					/*
    						This is the original code that I had which works fine
    						but is not as effecient as what I have now.
    						
    						Basically, Pixels are stored within 3 sucessive Bytes
    						in a BMP file, with one Byte each for Blue, Green and
    						Red values (in that order).
    						
    						So, this reads the Bytes for each pixel, one at a time
    						and then combines them into a single value which is
    						the combined RGB pixel value.
    						
    						I left the code as I think it make it a little easier to
    						understand what is going on, as well as how some of these
    						calls can be optimized.
    					*/
    
    					/*
    					var blue:int = fs.readUnsignedByte();
    					var green:int = fs.readUnsignedByte();
    					var red:int = fs.readUnsignedByte();
    					
    					pixels[position] = (red << 16 ^ green << 8 ^ blue);
    					*/
    
    					/*
    						Here is the final code which is more efficient, as it only
    						needs to make 2 read calls in order to get the values.
    						
    						Thanks to Thibault Imbert (bytearray.org) for pointing out
    						and helping me understand the optimization.
    					*/
    
    					//bytes in file are in Blue, Green, Red order
    					//int is 32 bits (8 bytes). So, we store the first two bytes of the pixel
    					// (which contain the Red value), and
    					//then shift everything over 1 byte (8bits) to make room for
    					//the green and blue values (remember the file is little endian), which we
    					// then write into the int in the right position
    					//The final value has the colors in the correct order (Red, Green, Blue)
    
    					var pixelValue:uint = fs.readUnsignedByte() | fs.readUnsignedShort() << 8;
    					pixels[position] = pixelValue;
    				}
    
    				//we are at the end of the row, so now we have to move the cursor
    				//forward so it ends on a multiple of 4
    				if(padding)
    				{
    					fs.position += padding;
    				}
    			}
    
    			//done reading file, close stream.
    			fs.close();
    
    			//create a Rectangle with width / height of Bitmap
    			var rect:Rectangle = new Rectangle(0, 0, bmpWidth, bmpHeight);
    
    			//create the BitmapData object to hold hold the BMP data.
    			//we do a red fill here so it is easier to see if we have any errors
    			//in our code
    			var bmpData:BitmapData = new BitmapData(bmpWidth, bmpHeight, false, 0xFF0000);
    
    			//copy the BMP pixel data into the BitmapData
    			bmpData.setVector(rect, pixels);
    
    			//create a new Bitmap instance using the BitmapData
    			var bitmap:Bitmap = new Bitmap(bmpData);
    			bitmap.x = 10;
    			bitmap.y = 10;
    
    			//add Bitmap to the display list
    			addChild(bitmap);
    		}
    	}
    }
    

    역시 그래픽 파일의 특성상 LITTLE_ENDIAN으로 바이트를 읽어들입니다. JPEG 같은 경우에는 BIG_ENDIAN이라 한참 헷갈렸던 적이 있었던 기억이 나네요 ^^;

    참고 : http://www.mikechambers.com/blog/2009/09/17/parsing-and-displaying-bmp-files-via-actionscript/
    예제 다운로드 : http://www.mikechambers.com/blog/files/examples/BMPViewer.zip

    오창훈님 블로그에 bmd.setVector (rect, pixels); setVector는 bmd.setPixel보다 빠른 퍼포먼스를 낸다고 조언을 해주셨네요 ^^;
    전 setVector 보다 setPixel이 더 퍼포먼스가 좋다고 생각하고 있었는데 역시나 아직 갈길이 멉니다 ㅜ_ㅜ

    현재 파일들 구조들에 대해 공부하고 있는데 최종 목표는 flex에서 각 파일 포멧들 간의 변경과 그래픽 파일들로 플래쉬 또는 동영상 파일로 컨버트 할 수 있는 프로그램을 만들려고 하는데 파일들 구조가 생각보다 쉽지 않네요 ㅜ_ㅜ 언제나 완성할 수 있을지 걱정입니다 ㅜ_ㅜ
    저작자 표시 비영리 변경 금지
    신고
    Posted by 코멧'★
    TAG AIR, bmp
    Flex/AIR/AS3/AIR2009.10.09 14:27


    제작툴 : Adobe Flash Builder 4
    사용언어 : ActionScript 3.0 & AIR 1.5

    미해결 문제
      * 1. USB나 기타 저장장치 자동 인식
      * 2. 스타일 적용
      * 3. 폴더 복사, 이동, 삭제
      * 4. 오른쪽 마우스 버튼 메뉴
      * 5. 로컬 디스크 새로 읽어올시 프로그램 어는 문제 미해결;

    작동원리
      * Tree 콤포넌트 확장
      * Renderer 사용
      * 비동기식 폴더내역 검색과 동기식 Local Disk 검색
      * 폴더 아이콘, 선택되었을때 Dot border, Dot line 이미지로 구현
      * 혹시나 모를 다국어 버젼을 위한 내 컴퓨터/로컬 디스크 부분 한글은 public 으로 선언
         - 원본 폴더명을 전부 쓰려고 하였으나 내 컴퓨터/로컬 디스크는 Window OS만 사용하므로 배제
      * Node 간 높이 간격 18px (변경시 코드의 수정과 이미지 수정이 불가피)
      * Font Size 12px (변경시 코드의 수정과 이미지 수정이 불가피)

    저작자 표시 비영리 변경 금지
    신고
    Posted by 코멧'★

    티스토리 툴바