2015-09-16 21 views
6

GlSurfaceView üzerindeki bitmap üzerinde birden çok efekt vermek için bu kodu kullanıyorum. apply-effects-on-image-using-effectsGLSurfaceView'den bitmap nasıl kaydedilir (Sadece tüm bitmap değil, tüm doku)

Şimdi, bitmapi kaydetmek istiyorum. Bitmap'i kaydetmek için kod verdiler ama bununla birlikte, tüm GlSurfaceView bitmap görüntüsü olarak kaydedilecek. Bunun yerine Resim olarak kaydetmek için yalnızca bitmap alanını kaydetmek istiyorum.

Piksel alan ve bundan bitmap yapan ve ayrıca görüntü yapan yöntem vardır. Bitmap üst koordinat sol ile ör .:

sanırım
public Bitmap takeScreenshot(GL10 mGL) { 
    final int mWidth = mEffectView.getWidth(); 
    final int mHeight = mEffectView.getHeight(); 
    IntBuffer ib = IntBuffer.allocate(mWidth * mHeight); 
    IntBuffer ibt = IntBuffer.allocate(mWidth * mHeight); 


    mGL.glReadPixels(0, 0, mWidth, mHeight, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

    // Convert upside down mirror-reversed image to right-side up normal 
    // image. 
    for (int i = 0; i < mHeight; i++) { 
    for (int j = 0; j < mWidth; j++) { 
    ibt.put((mHeight - i - 1) * mWidth + j, ib.get(i * mWidth + j)); 
    } 
    } 

    Bitmap mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); 
    mBitmap.copyPixelsFromBuffer(ibt); 
    return mBitmap; 
} 

, ben bunun yerine 0, 0 ile başlamıyorsa olmak gibi güncellemek gerekir ki başlamak gerekir. Ve bu bitmap yükseklik ve genişliğe kadar çalışmalıdır.

Böylece, sorunumu çözebiliyor ancak GLSurfaceView'daki bitmap görüntüsünün koordinatını nasıl alacağımı bilmiyorum.

Lütfen daha fazla bilgi için aşağıdaki resmi kontrol ediniz.

Orjinal Resim:

enter image description here

Yüklendi etkisi ekranında resim:

enter image description here

Görüntü efekti uygulandıktan sonra ve kaydettikten:

Bu, ne isterse budur.

enter image description here

+0

GLSurfaceView'in yüzeyi, üzerinde tam olarak çizdiğiniz şeyi içerir. Resmi çizerken koordinatları belirttiğinizden, görüntüyü okumak istediğinizde neden koordinatları bilmediğinizi anlamıyorum. – fadden

+0

@fadden OpenGL-es ile pek iyi değilim. Kodum, sorumu verdiğim bağlantı ile neredeyse aynı. Şimdi Görüntü koordinatını almak ve sadece görüntü bölümünü etkisiz hale getirmek için lütfen cevap verebilir misiniz? –

+0

Görüntüyü neden daha sonra kırpmıyorsunuz? – jyoon

cevap

0

görüntünün boyutlarını alabilirsiniz, Bitmapin tam konumunu elde edebilirsiniz.

Görüntü boyutlarının x ve y olmasını sağlayın ve ekran boyutlarını this post izleyerek alın. a ve b olsun.

Başlangıcınız ((a-x)/2, (b-y)/2) olacaktır.

Görüntünüzü kırpmak için bunu kullanın.

+0

OK Cevabınız için teşekkürler. Bunu deneyeyim. –

+0

, istediğim kadar iyi çalışmıyor. –

+0

Verilen hesapla kaydedeceğim zaman doğru görüntüyü alamıyorum. –