2012-03-02 2 views
1

내 앱의 메모리 사용을 최적화 할 예정입니다. 내 응용 프로그램에는 많은 장치 메모리를 사용하는 그래픽이있는 많은 UI가 있습니다.UIImage로 16 비트 이미지를로드하는 방법은 무엇입니까?

32 비트 대신 16 비트 이미지를 사용하려고했습니다. OpenGL 텍스처의 메모리 사용량이 줄어 듭니다. 그러나 UIImage가 보유한 이미지는 32 비트 이미지와 동일한 양의 메모리를 사용합니다.

UIImage는 픽셀 형식이 16 비트인지 32 비트인지에 관계없이 이미지를 저장하기 위해 픽셀 당 8 비트를 사용합니까? 16 비트 이미지로 메모리 소비를 줄이려면 어떻게해야합니까 ??

고마워요.

+1

"pngcrush"를 mac.But에서 사용할 수 있습니다. 그렇다면 아이폰이나 맥이나 다른 시스템의 ios.not에있는 이미지 만 볼 수 있습니다. 최적화는 이와 같습니다. 덕분에 –

답변

1

하면 상기 cgdata 제공

CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((CFDataRef)[NSData dataWithContentsOfFile:@"some_file.png"]); 

를 사용하고 치수, 픽셀 당 비트를위한 모든 적절한 값을 설정하고에서 만든 데이터 제공자를 사용

CGImageRef CGImageCreate (
    size_t width, 
    size_t height, 
    size_t bitsPerComponent, 
    size_t bitsPerPixel, 
    size_t bytesPerRow, 
    CGColorSpaceRef colorspace, 
    CGBitmapInfo bitmapInfo, 
    CGDataProviderRef provider, 
    const CGFloat decode[], 
    bool shouldInterpolate, 
    CGColorRenderingIntent intent 
); 

함수를 사용하여 첫 번째 단계.

그런 다음 [UIImage imageWithCGImage :] 메서드를 사용하여 CGImageRefs에서 UIImage를 가져옵니다.

+0

. 내가 도와 준 UIImage 만든 UIImageView 그것을 초기화하고 내 mainview에 추가했습니다. 하지만 시스템이 뷰를 렌더링 할 때 autorelease 풀에서 충돌이 발생했습니다. 응용 프로그램이 "decode_data"(CAlayer 렌더링의 내부 함수 호출) 줄에서 충돌했습니다. CGImageCreate의 decode [] 매개 변수에 NULL을 전달 했으므로 설명서가 좋았습니다. uv hv 아이디어로 인해 크래시가 발생 했나요? –

+0

Core Graphics의 전문가가 아닙니다. 미안하지만 ... bitmapinfo의 colorspace와 같은 구조체에 대해 제공하는 값을 두 번 확인하고, 조만간 릴리스하지 않는지 확인하십시오. –

+0

16 비트는 일부 검색 및 시도에서 지원되지 않는다고 생각합니다. UR 응답으로는 작동하지 않지만 (cox는 매우 유용한 정보를 제공합니다) 올바른 표시를 할 수 없습니다. 정말 고마워. –

관련 문제