2015-09-16 26 views
6

Tôi đang sử dụng mã này để cung cấp nhiều hiệu ứng trên bitmap có trên GlSurfaceView. apply-effects-on-image-using-effectsCách lưu bitmap từ GLSurfaceView (Chỉ bitmap, không phải toàn bộ texture)

Bây giờ, tôi muốn lưu bitmap. Họ đã đưa ra mã để lưu bitmap nhưng với điều đó, toàn bộ GlSurfaceView sẽ được lưu thành hình ảnh bitmap. Thay vào đó, tôi chỉ muốn lưu vùng bitmap để lưu thành Image.

Có phương pháp lấy pixel và tạo bitmap từ đó và cũng tạo hình ảnh. ví dụ .:

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

tôi đoán, tôi cần phải cập nhật nó như thế nào, thay vào đó nó được bắt đầu với 0, 0, mà nên bắt đầu với bitmap trên bên trái tọa độ. Và điều đó sẽ hoạt động cho đến chiều cao và chiều rộng bitmap.

Vì vậy, với điều đó tôi có thể giải quyết được vấn đề của mình nhưng không biết cách lấy tọa độ của hình ảnh bitmap đó trong GLSurfaceView.

Vui lòng kiểm tra hình ảnh bên dưới để biết thêm chi tiết.

gốc Hình ảnh:

enter image description here

ảnh Loaded trong màn hình có hiệu lực:

enter image description here

Hình ảnh sau khi áp dụng hiệu ứng và lưu nó:

enter image description here

Đây là những gì tôi muốn.

enter image description here

+0

Bề mặt của GLSurfaceView chứa chính xác những gì bạn đã vẽ trên đó. Vì bạn đã xác định tọa độ khi bạn vẽ hình ảnh, tôi không hiểu tại sao bạn không biết tọa độ khi bạn muốn đọc lại hình ảnh. – fadden

+0

@fadden Tôi không giỏi lắm với OpenGL-es. Mã của tôi gần giống như liên kết tôi đã đưa ra trong câu hỏi của mình. Bây giờ bạn có thể vui lòng trả lời cho nó để có được phối hợp hình ảnh và chỉ lấy một phần hình ảnh có hiệu lực? –

+0

Tại sao không cắt hình ảnh sau đó? – jyoon

Trả lời

0

Nếu bạn có thể nhận được các kích thước của hình ảnh, bạn có thể có được vị trí chính xác của bitmap.

Để kích thước hình ảnh là xy và nhận kích thước màn hình sau this post. Hãy để đó là ab.

Vị trí bắt đầu của bạn sẽ là ((a-x)/2, (b-y)/2).

Sử dụng tính năng này để cắt hình ảnh của bạn.

+0

OK Cảm ơn bạn đã trả lời. Hãy để tôi thử điều đó. –

+0

thats không hoạt động tốt như tôi muốn. –

+0

Tôi không nhận được hình ảnh phù hợp khi tôi lưu nó với tính toán đã cho. –