Bitmap too large~
ikkyu0319 opened this issue · 12 comments
`OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
05-18 15:54:25.778 8210-8236/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
05-18 15:54:25.779 8210-8236/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
05-18 15:54:25.793 8210-8236/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
05-18 15:54:25.794 8210-8236/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
05-18 15:54:25.794 8210-8236/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)`
Thanks for the issue. I've added fix and it will be available soon in next library update
Any update on this?
It should be fixed in 2.1.1. If you can reproduce it with the latest version, please attach image and device info so I can reproduce.
@shliama
Hi Oleksii,
I am using the ucrop top of tree cloning yesterday by:
git@github.com:Yalantis/uCrop.git
gradle.properties shows: VERSION_NAME=2.1.1
I am able to reprodue this issue with the sample(com.yalantis.ucrop.sample) on a M4 LTE device.
Here the image and device information:
Error logs:
....
07-16 09:38:43.354 19663-19855/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
07-16 09:38:43.371 19663-19855/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
07-16 09:38:43.388 19663-19855/com.yalantis.ucrop.sample W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)
....
Oops, I have problem to upload the images to s3 (blocked by the Great Fire Wall of China), I'll have a try later...
@shliama are you able to reproduce using my test photo? Please let me know if I didn't using uCrop the right way.
android:hardwareAccelerated="false"
or
Canvas canvas = new Canvas();
if(canvas.getMaximumBitmapWidth() < bitmap.getWidth() ) {
cropView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
}
@swepthong
android:hardwareAccelerated="false"
does can workaround this issue, but will largely impact the image op performance.
canvas
cannot provide the correct gl texure extent limit. My modified version is:
if (bitmap.getWidth() > GL10.GL_MAX_TEXTURE_SIZE || bitmap.getHeight() > GL10.GL_MAX_TEXTURE_SIZE) {
cv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4128x2322, max=4096x4096)
compile 'com.yalantis:ucrop:2.1.2'
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:hardwareAccelerated="false"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
this is useful
X
The proper solution is to use UCrop.Options setMaxBitmapSize() to make sure the OpenGLRenderer texture pixel limit is not exceeded
Please check the latest uCrop version
Now you can choose between:
Lightweight general solution
compile 'com.yalantis:ucrop:2.2.0'
Get power of the native code to preserve image quality (+ about 1.5 MB to an apk size)
compile 'com.yalantis:ucrop:2.2.0-native'