iOS2013.01.21 09:30

iOS4.0 부터 지원하는 ALAssetLibrary framework를 사용하면 UIImagePickerController를 사용하지 않아도 사용자 iOS기기에 저장되어 있는 사진 또는 비디오를 가져 올수 있다. 


ALAasetLibrary는 크게 ALAasetsLibrary > ALAssetsGroup > ALAsset 으로 이루어져 있고, ALAssetLibrary를 통해 ALAssetsGroup를 부르고 ALAssetsGroup을 통해 최종적으로 사진 또는 비디오 정보를 가지고 있는 ALAsset을 가져 온다. 이 문서는 ALAssetLibrary 자체를 다루는 내용이 아니기 때문에 불러오는 방법에 대해서는 생략 한다.


ALAsset 클래스를 보면 defaultRepresentation 이 있고 여기에 실제 이미지 정보를 가지고 있다. 물론 Exif 정보나 thumbnail은 defaultRepresentation을 거치지 않아도 ALAsset을 통해 바로 불러 올수 있다.


thumbnail, fullscreenImage, fullResolutionImage를 불러오는 방법은 다음과 같다.



// thumbnail
CGImageRef imageRef = CGImageCreateCopy(asset.thumbnail); UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); // fullScreen 화면에 맞는 크기의 이미지 CGImageRef imageRef = CGImageCreateCopy(asset.defaultRepresentation.fullScreenImage); UIImage *fullScreenImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); // fullResolution 원본 이미지 CGImageRef imageRef = CGImageCreateCopy(asset.defaultRepresentation.fullResolutionImage); UIImage *fullResolutionImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef);


위의 3가지 크기를 이용하면 대부분의 앱개발이 가능 하겠지만, fullScreenImage, fullResolutionImage는 생성을 할때 많은 연산이 필요로 하므로 Performance에 문제가 생길수도 있다. 예를 들어 UITableView에서 fullScreenImage를 동시에 여러개를 생성한다면 어느 디바이스건 UI가 얼어 버리는 현상이 발생한다. 


그럼 fullScreenImage 보다는 작지만 thumbnail 보단 큰 이미지를 생성하려면 어떻게 해야 하는가? (fullScreenImage 보다 작은 이미지를 생성한다면 UI가 얼어 버리는 현상 발생 빈도를 줄어 들게 할 수 있을것이다)


필자가 찾은 방법은 AssetRePresentation의 getBytes를 통해 사진 또는 비디오에 대한 데이터를 불러온 뒤에 해당 데이터를 통해 CGImageRef를 생성하는 방법이다. 전달하는 size를 통해 이미지 크기를 조절 할 수 있다.

- (CGImageRef)getThumbnailWithALAsset:(ALAsset *)asset withSize:(float)size { ALAssetRepresentation *representation = asset.defaultRepresentation; CGImageRef imageRef = nil; NSData *data = nil; uint8_t *buffer = (uint8_t *)malloc(sizeof(uint8_t)*[representation size]); if (buffer != NULL) { NSError *error = nil; NSUInteger bytesRead = [representation getBytes:buffer fromOffset:0 length:[representation size] error:&error]; data = [NSData dataWithBytes:buffer length:bytesRead]; free(buffer); } if ([data length]) { CGImageSourceRef sourceRef = CGImageSourceCreateWithData((CFDataRef)data, nil); NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: (id)kCFBooleanTrue, kCGImageSourceCreateThumbnailFromImageIfAbsent, (id)kCFBooleanTrue, kCGImageSourceCreateThumbnailFromImageAlways, (id)[NSNumber numberWithFloat:size], kCGImageSourceThumbnailMaxPixelSize, (id)kCFBooleanTrue, kCGImageSourceCreateThumbnailWithTransform, nil]; imageRef = CGImageSourceCreateThumbnailAtIndex(sourceRef, 0, (CFDictionaryRef)options); if (sourceRef) CFRelease(sourceRef); } return imageRef;

}


위의 방법으로 생성된 CGImageRef 를 이용하여 이미지를 생성하면 된다. 단 비디오일 경우 AssetRepresentation을 메모리에 올리는 과정에서 비디오의 길이가 길 경우 (용량이 클 경우) 메모리 부족으로 앱이 죽어 버리는 경우가 있으니 ALAsset이 비디오일 경우에는 기존의 AssetRepresentation의 fullScreenImage 또는 fullResolution을 이용하는게 좋다.


또한 위의 방법을 이용하여 많은 이미지를 동시에 생성할 경우 생성할 당시 메모리가 많이 필요하므로 상황에 따라 주의에서 사용할 필요가 있다. 필자는 아직까진 이미지를 생성하면서 메모리가 부족에서 앱이 죽어 버리는 현상은 없었다. (단 ALAsset이 비디오일 때는 앱이 죽을수도 있다)




'iOS' 카테고리의 다른 글

[iOS] ALAsset으로 Custom Image 생성하기  (0) 2013.01.21
Posted by Flash 동강
Flash platform2010.09.19 14:53

 몇일전 Apple 이 아이폰 앱 개발 정책 약관을 변경에 따라 다시 Flash CS5 를 이용하여 아이폰 앱 개발이 가능해 졌다. 정책이 바뀌기전 심사 중이었던 플래시로 만든 앱들도 심사 완료 상태가 되었다. 


 이 문서에서는 두가지,  Flash CS5 의 Package for iPhone 으로 개발하는 아이폰앱과 Adobe 에서 2011년 상반기 런칭을 목표로해서 개발하고 있는 Android for AIR 에 대한 소개 및 가능성에 대해 다룰 것이다. 


 먼저 Package for iPhone 이다. Flash Pro CS5를 이용해 만든 결과물이 아이폰 설치 파일인 .ipa 로 나온다. 개발자는 맥에서 xcode 와 object-c를 이용하여 개발한 .ipa 를 테스트하는 방법과 동일하게 자신의 아이폰에 설치 할 수 있다. 



(출처 : http://www.mikechambers.com/blog/ )


 단순히 Flash 툴을 이용해 ( Actionscript3.0 ) 만든 코드를 LLVM ( Low Level Virtual Machine ) 을 통해 .ipa 로 컴파일하는 것이다. 


 몇 가지 테스트를 해보니, 아이폰에서 제공하는 네이티브 API 를 사용하지 않는 컨텐츠라면 데스크톱 환경에서 사용하고 있는 소스를 아이폰 용으로 컴파일해서 사용해 보니 크게 퍼포먼스가 떨어지지 않는다. 다만 폰(스마트폰)이라는 디바이스적인 한계가 있기때문에 최적화가 필요 하다. 


최적화에 대한 내용은 어도비 에반젤리스트인 마이크챔버스의 블로그 내용을 참고하라.



 장점은 데스크톱에서 사용하는 플래시 컨텐츠의 소스를 그대로 가져다 쓸 수 있다는 점이다. 다만 데스크톱은 마우스를 이용하고 폰은 터치를 이용하는 점이 다를 뿐이지 소스를 전반적으로 수정할 필요는 없다. UI 를 구성하는 뷰단과 이벤트 처리만 바꿔준다면 손 쉽게 서비스가 가능한 앱을 만들수 있다. 




 단점은 굳이 플래시를 가지고 개발을 할 필요가 없다는 것이다. LLVM 의 성능이 향상된다면 컴파일되서 나오는 결과물의 퍼포먼스도 빨라지겠지만 xcode 와 object-c 를 이용하여 개발한 앱이 같은 기능을 한다면 더 빠르다. 그리고 데스크톱 자원을 사용해서 무리 없이 실행되던 게임들도 아이폰에서 실행 시키면 느릴수 있다. 아니 느리다. 퍼포먼스 튜닝이 반드시 필요한 부분이다. 하지만 모바일 용으로 퍼포먼스 튜닝을 한다면 데스트톱에서는 더 빠르게 실행 시킬수 있기 때문에 그 소스는 더 경쟁력이 생길 것이다. 


위의 단점들을 보면 굳이 Flash를 이용하여 아이폰 앱 개발을 할 필요성을 못느낀다. 하지만 같은 소스로 Android 앱까지 개발할수 있다면 생각이 달라질 것 같다.


현재 prerelease 상태로 Android OS 에 설치되는 AIR Runtime 이 개발 중에 있다. 아이폰 앱 개발과는 방법이 조금 다르지만 Flash CS5를 이용하여 안드로이드 앱을 개발하는 건 같다. 다만 안드로이드 OS 2.2 버전 이상에서 설치되며 폰에 AIR Runtime 을 설치해야만 Flash 로 개발한 앱을 설치 할 수 있다. 


자세한 개발 방법은 아래 사이트를 참고 하라.



위의 링크에서 확인할 수 있듯 많은 앱들이 이미 개발 되었다. 아직 prerelease 상태이기 때문에 Flash CS5 Android extention을 설치해야 한다. 설치는 AIR for Android prerelease program 에 가입한 후에 해당 사이트에 가면 다운로드 받을수 있다. 


Adobe AIR 가 폰에 설치되어 있어야만 Flash 로 만든 앱들을 설치 할 수 있다는 단점이 있지만, 이 부분은 정식 릴리즈가 되는 시점에서 해결책이 나올 것으로 본다. 몇가지 앱들을 넥서스원(Android 2.2)에 설치 해봤는데 성능이 기대보다 좋다. 개인적으로 아이폰 앱 보다는 안드로이드 앱 개발의 가능성이 높게 느껴 진다. 


다만, 아이폰과 안드로이드 해상도가 다르기 때문에 같은 뷰를 보여 주기 위해서는 소스 변경이 불가피 하고 안드로이드가 탑재되는 스마트폰도 역시 폰에 불가하기 때문에 성능 최적화가 필요 하다. 하지만, 이를 제외 하면 상당히 괜찮다. 아니 나쁘지 않다. 큰 리소스를 필요로 하는 앱이라면 네이티브 코드를 이용하여 개발하는게 휠씬 좋겠지만, 가벼운 컨텐츠 개발이라면 상당히 매력적인 기능이 될 것이다. 


하나의 코드를 이용하여, 데스트 톱( Windows, Mac, Linux), 모바일 ( 아이폰, 안드로이드 그리고 추가적으로 확장 예정인  OS ) 에서 모두 실행 될 수 있는 앱을 개발할 수 있다는게 Adobe가 내세우는 장점이고 나에게도 큰 장점으로 다가 온다. 다만 아직 갈 길이 많이 남아 있다. 퍼포먼스 측면에서 HTML5를 이용해서 개발한 것과 별 다를게 없다면 HTML5의 확장성에 밀리게 될게 뻔하기 때문이다. 하지만 네이티브 API가 접근 할 수 있다는 것 만으로도 상당히 큰 장점이 될 것이다. 그리고 소스를 재사용할 수 있다는 점은 인력 부족 상태에서 하나의 대안으로 자리 잡을 수도 있을것 같다. (또한 아직 prerelease 다 )


다음은 웹에서 서비스 하고 있는 소스를 이용해 뷰만 바꾼것을 아이폰과 안드로이드 앱으로 컴파일해서 설치해본 영상이다.






'Flash platform' 카테고리의 다른 글

Flash App Performance : Image Sprite Sheet  (0) 2012.01.25
[Mobile] Flash Platform for Mobile  (0) 2010.09.19
Flex for Mobile Devices  (0) 2009.11.06
Flash / Flex 로 만든건 느리다?  (2) 2009.09.08
Posted by Flash 동강
i'T news2010.01.31 10:58
 
원문 : Can Flash be saved? : http://scobleizer.com/2010/01/30/can-flash-be-saved/

번역 : 플래시(Flash) 가 살아날수 있을까? : http://www.cyworld.com/chobs01kr/3252650

AppleiPad 를 발표를 하고 나서 무수히 많은 iPad 관련 포스팅과 이번에도 역시 탑재가 안된 Flash 에 대한
포스팅이 올라오고 있는데요. 그닥 이해 하진 못하겠지만 나름 현실적으로 써놨다 생각 되길래 올려 봅니다.

내용을 간단히 요약해 보면 HTML 5 가 나오고 Google 등과 같은 메이져 회사에서 이를 전폭적으로 지지하고 있고, 유투브도 HTML 5를 이용한 동영상 플레이어를 제공해 주고 있지요. Flash 도 어쩔수 없는 플러그 인이기 때문에 Flash Player 가 안깔려 있는 예를 들면 iPhone iPad 같은 곳에서는 안보이기 때문에 Rich 한 사용자 환경을 제공해 줄수 없습니다. 결국 Flash 컨텐츠는 새로운 웹 시장에서 점점 사라질 것 같다는 내용 입니다. 

다른 관점에서 iPad 에 대한 포스팅도 있어서 소개해 봅니다.

The iPad Provides the ultimate browsing experience? : http://theflashblog.com/?p=1703


 iPad 가 나오면 정말 다른 인터넷 환경이 생겨 날것 같습니다. 실제로 나와봐야 알겠지만, 웹에 미치는 영향력 또한 강할 것 입니다. 하지만 iPhone 에서 인터넷 하는 것과 iPad 에서 인터넷을 하는건 분명 다를것 같네요. 모든 웹 사이트들이 iPad 에 대응하여 Flash 를 없앤 웹을 만들게 될까요? 발 빠르게 대응하는 곳들은 이미 준비를 하고 있겠지만, 대처가 끝나기 전에 Flash 가 없는 웹의 불편함이 수면위로 올라 올것 같네요. 
 

 

(이미지 출처 : http://theflashblog.com/?p=1703 )
 
 
애플이 언제까지 이런 폐쇄적인 정책을 유지 할 수 있을지, 돈을 너무 좋아 하는건 아닌지 걱정이 되네요.
여러 견해를 보고 생각이 바뀌어서 수정 합니다. 


 

덧 1. 여러 블로그와 웹사이트에서 관련 토론들이 올라 오고 있네요.



스티브 잡스 "구글 모토는 헛소리 ... 어도비는 게을러



KMUG 에 올라온 "아이패드와 플래시"



Google’s ‘Don’t Be Evil’ Mantra is ‘Bullshit,’ Adobe Is Lazy: Apple’s Steve Jobs 

Read More 


덧 2. 제가 플래시 액션스크립트 카페 에 올린 글에서 장창학 님이 올려 주신 내용 입니다.

애플이 저렇게 Flash를 필요로 하지 않고 있고.. Google역시 자사의 인터넷 서비스로 먹고사는 입장이라 특정회사의 플러그인에 종속적이지 않은 웹을 지향하고 있으며, 아무리 안드로이드, 윈도모바일이 Flash를 지원해 준다고해도 반쪽시장으로 전락해 버린다면 굳이 Flash로 할 이유도 없어질지도 모릅니다. 

개인적으로 Adobe에게 바라는 것은(그들의 기술을 사랑하니까) 너무 Flash만 바라보지 않았으면 좋겠씁니다. 대부분의 IT업체들이 하나의 기술에 매진하는 것 보다는 여러 기술(MS의 경우 검색, 운영체제 등 분야가 다양합니다.)병행하는데 유독 Adobe는 Flash에 거의 광적으로 역량을 집중하고 있습니다.

시장에는 대안기술인 Silverlight나 Java, Javascript등이 널려있는데도 Flash만 가능하다고 다소 과장으로 우기는 것은 그렇다 치더라도 절대적 점유률하나만 믿고 회사의 사활을 Flash에 건다는 것은 Flash가 시장에서 인기가 없어지면 Flash만 없어지지 않고 Adobe도 사라질지 모르죠
물론 그렇게 되지는 않겠지만 Adobe에서 HTML5도 Flash못지 않는 시장임을 제발 윗대가리들은 알았으면 좋겠습니다. 우선 Dreamweaver가 HTML5를 완벽히 지원하고, 다양한 HTML5라이브러리를 제공하거나, ColdFusion에서 Javascript, HTML5를 서버측에서 지원하거나, FMS에서 클라이언트플레이어를 Flash외에도 HTML5로 제작할 수 있게 한다거나, 아예 Flex를 Flash외에 MXML을 컴파일하면 완벽한 html및 AJAX로 아웃풋할 수 있다면 많은 Adobe 개발자가 Flash를 다소 덜 개발할지라도 그들이 쓰는 툴을 그대로 이용하면서 새로운 웹환경으로 이전할 수 있을텐데..

일부 Adobe나 Flash빠들은 오로지 Flash만 주창하며, Adobe역시 Flash없는 웹은 생각치도 않는다고하는데 문제는 브라우저를 만드는 대부분의 업체, 구글, 애플, MS, FireFox가 HTML5를 W3C보다 먼저 도입하려고 하고 있고, Flash가 이들중 일부만 깔린다거나 모바일기기에서의 이들 브라우저서 반쪽으로 전락한다면 대부분의 웹개발사 입자에서 굳이 Flash를 쓸일이 없어질 수 있습니다. 물론 여전히 Flash를 써야한다고 생각하는 개발자도 있겠지만 말입니다

저의 경우 사실 간단한것도 수백줄의 코드와 특정툴에 종속적이며, 더욱이 거의 클라이언트측에서 구동되는 것을 개발해야하는 Flash에 대해 그닥 매력을 점점 잃어가는 입장이지만 Flash만이 해야하는 부분도 분명 있다고 믿고 있기에 Flash가 밀리는 꼴은 보기 싫지만 굳이 저의 정체성을 말씀드리자면 같은 정당내의 급진 개혁세력이랄까.. Flash의 내부 Core를 뜯어 고쳐서라도 HTML5로 렌더링을 시켜서라도 개발자는 AS를 그대로 쓰고 아웃풋은 어떠한 환경에서도 구동되게 해야 한다고 생각하는 입장입니다.

어떤 분들은 모두 현실성이 떨어진다고 하는 분들도 있지만 웹의 지난 10년을 뒤돌아 보면 2002년 월드컵의 웹환경과 지금의 환경의 변화에서 Flash가 영원할 수 있을지 생각해 봐야할 것 같습니다. 당시에는 아아폰과 같은 물건은 수십년일의 일일지도 모른다고 생각했으니까요.




( 원문 : http://cafe.naver.com/flashactionscript/48591 )


이러한 상황에서 애플, Adobe, 구글이 어떻게 대처 할지, Adobe 는 어떻게 방어 할지 흥미 진진 합니다.

Posted by Flash 동강
i'T news2008.12.11 12:55

아이폰 UI를 디자인하는데 걸린 시간은 얼마일까요?

 

같은 터치 UI 를 내 놓고 비교가 될 수 밖에 없는 두 회사 인거 같습니다.

 

아이폰 UI 관련 링크  

 

햅틱 관련 링크

 

 

위의 블로그 글과 뉴스글을  보면서...

 아이폰 UI 가 햅틱 UI 보다 뛰어나다는 건 부인 할 수 없는 사실 입니다. 그렇다고 햅틱 UI 가 나쁘다는 것은 아닙니다. 하지만 14일 만에 UI 를 만들었다는 것을 자랑인냥 써 놓은 기사는 않 좋게 보이네요. 

햅틱 UI 가 아이폰 보다 늦게 나온건 사실이고, 아이폰에 영향을 많이 받았단 것도 사실일 것입니다. 우리 나라에서 인기를 끌고 있지만 아이폰이 국내에 출시 된다면 상황을 달라지지 않을까 생각됩니다. 좀더 경쟁력있고 살 수 밖 없는 제품을 만들기 위해서는 UI 라는 개념을 UX 라는 개념을 단지 '디자인 이다' 라는 생각을 버렸으면 하는 바램입니다. 디자인을 하는 것이 UI 개발을 하는 것에 속하는 일이겠지만, 어떤 기능이 사용자에게 필요 하다고 만들면 뭐합니까?
정작 사용자는 못 쓰는데 '내가 이런 기능을 만들었다' 에 만족하지 말고 어떻게 하면 사용자가 만족할 수 있을까의 목적에서 UI 와 UX 의 부분을 더욱 고려 해서 개발을 하였으면 하는 바램입니다. 물론 제 자신에게도 하는 말 입니다. 

Flash 를 하시는 분들은 그 중요성을 잘 알고 계시겠지만................. 

 
"어떤 기능이 필요하다고
그걸 사용자에게 수준이상의 학습을 요구해서 구현하는 것은 맞지 않다.
우린 그렇게 하지 않는다"
 

WWDC08 에서 잡스횽이 삼성 폰과 아이폰의 기능을 비교하면서 했던 말 입니다.

 

 14 days 라는 말 자체가 햅틱 UI 를 위해 밤을 지새웠던 개발자들의 노고를 무시 하고 있다는 느낌이 들어 기분이 좋지 않네요.

Posted by Flash 동강