2012-07-25 27 views
9

Bellekte yüklenemeyecek kadar büyük, ancak yalnızca büyük görüntüdeki piksel kümesinin alt kümesiyle ilgilenen büyük bir resmim var. Sadece bu piksel alt kümesini belleğe çözmek mümkün mü? Ben Şimdi ben yapıyorum ... Android'de bu BitmapRegionDecoder ben CGDataProviderCreateSequential bulduğuios Görüntünün bir parçasını çözme

gibi bir şey vardır ama yapıcı ham piksel ihtiyacı denilen tam olarak yapmak API bir sınıf olduğunu

biliyorum böyle bir şey: bir CGImageSourceCreateWithData() (veya URL ne olursa olsun) oluşturursanız bu işe yarayabilecek

UIImage* srcImage = ...; 
    CFDataRef cgImgDataRef = CGDataProviderCopyData(CGImageGetDataProvider(srcImage.CGImage));//After this call, all pixels are decoded into memory and the app crashes 
char* imageData = (char*)CFDataGetBytePtr(cgImgDataRef); 
+0

Geçerli bilgelik, bunu yapmanın yolunun görüntüyü çini içine dilimlemek ve yalnızca şu anda uygun yakınlaştırma düzeyinde görüntülenen fayansları yüklemek olduğunu söylüyor. Bu görüntü ne kadar büyük (piksel boyutlarında)? – warrenm

+0

4096x3072 civarı ama şu an büyük resmimden oluşan bir kutuyu doğrudan açık gl ES uygulamasına yüklemek istiyorum. Bu yüzden gerekli pikselleri ayıklamam ve alt piksel verilerimle glTexImage2D (...) çağrısı yapmam gerekiyor – AkademiksQc

+0

Her zaman aynı ayıkladığınız alt boyutun boyutu mu, yoksa değişiyor mu? Aralığı nedir? – warrenm

cevap

10

tek çıkar yol bu, o zaman CGImageCreateWithJPEGDataProvider veya CGImageCreateWithPNGDataProvider kullanarak CGImageRef oluşturun. Bu CGImageRef ile CGImageCreateWithImageInRect()'u kullanmaya ve büyük resmin alt kısmına çekmeyi deneyebilirsiniz.

Yapmaya çalıştığınız şey görüntüyü kaplamaksa, daha sonra sizin için daha fazla bilgi alacağından lütfen sorunuzu netleştirin.

+0

Gerçekten işe yarıyor! Önceden [UIImage imageNamed ...] kullanarak jpeg verilerini yüklüyordum. Görünüşe göre CGImageCreateWithJPEGDataProvider + CGImageCreateWithImageInRect() yalnızca gerekli kısmı çözer. Her zaman düşük bellek nedeniyle çöküyor önce şimdi çalışır. Bu yöntemler hakkında daha fazla açıklama olup olmadığını görmek için belgeleri kontrol edeceğim. Bilgileriniz için, hedef büyük resmi diskten yüklemek ve opengl'e göndermek. Cihazda desteklenen max opengl doku boyutuna bağlı olarak onu döşemem gerekiyor – AkademiksQc

+0

Gerçekten çok büyük JPEG'ler için libjpeg-turbo ve armv7 hızlandırması için NEON kullanan açık kaynaklı serbest kütüphane kullanabilirsiniz. Telefonda 18000x18000 NASA görüntülerini döşemek ve göstermek için PhotoScrollerNetwork projemde kullanıyorum! –

+0

tamam ben bakacağız ama ... yazılımın sadece kod çözmesi değil mi? Yerleşik jpeg donanım kod çözücüsü için ios SDK'yı kullanmam gerektiğini düşündüm. – AkademiksQc

İlgili konular