2015-09-16 4 views
6

私はGlSurfaceView上にあるビットマップ上に複数の効果を与えるために、このコードを使用しています。 apply-effects-on-image-using-effects(ビットマップのみではなく、全体の質感)

は今、私は、ビットマップを保存したいです。彼らはビットマップを保存するコードを与えていますが、それを使ってGlSurfaceView全体をビットマップイメージとして保存します。代わりに、ビットマップ領域だけを保存してImageとして保存します。

そこからピクセルをとりビットマップにして画像を作る方法があります。 例えば:

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; 
} 

私は推測する、私は、のようにそれを更新する代わりに、それは0で始まることを、0、座標左ビットマップトップでスタートしなければならないことが必要です。そして、それはビットマップの高さと幅まで動作するはずです。

だから、それを私が解決し、私の問題にできるが、それはGLSurfaceViewでビットマップ画像の座標を取得する方法がわからないことができます。

詳細を確認するには、下の画像を確認してください。

オリジナル画像:

enter image description here

ロードされた演出画面での画像:

enter image description here

画像効果を適用した後、それを保存:

enter image description here

これは私が欲しいものです。

enter image description here

+0

GLSurfaceViewのサーフェスには、あなたが描画したものが含まれています。画像を描いたときに座標を指定したので、画像を読みたいときの座標がわからない理由を理解できません。 – fadden

+0

@fadden OpenGL-esではあまりよくありません。私のコードは私の質問で与えたリンクとほとんど同じです。今度はイメージの座標を取得し、イメージの部分のみをエフェクトを使って返すことができますか? –

+0

後で画像をトリミングしてみませんか? – jyoon

答えて

0

あなたは画像の大きさを得ることができる場合、あなたはビットマップの正確な位置を得ることができます。

画像のサイズをxyとし、画面のサイズをthis postとします。それをabとしましょう。

あなたの開始位置は((a-x)/2, (b-y)/2)になります。

画像をトリミングする場合に使用します。

+0

OKありがとうございます。私はそれを試してみましょう。 –

+0

それは私が欲しいとうまく動作しないthats。 –

+0

私は、与えられた計算でそれを保存しようとすると、適切なイメージが得られません。 –

関連する問題