-
Star
(214)
You must be signed in to star a gist -
Fork
(41)
You must be signed in to fork a gist
-
-
Save julianshen/5829333 to your computer and use it in GitHub Desktop.
/* | |
* Copyright 2014 Julian Shen | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package com.example.picassodemo; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapShader; | |
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import com.squareup.picasso.Transformation; | |
/** | |
* Created by julian on 13/6/21. | |
*/ | |
public class CircleTransform implements Transformation { | |
@Override | |
public Bitmap transform(Bitmap source) { | |
int size = Math.min(source.getWidth(), source.getHeight()); | |
int x = (source.getWidth() - size) / 2; | |
int y = (source.getHeight() - size) / 2; | |
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); | |
if (squaredBitmap != source) { | |
source.recycle(); | |
} | |
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); | |
Canvas canvas = new Canvas(bitmap); | |
Paint paint = new Paint(); | |
BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); | |
paint.setShader(shader); | |
paint.setAntiAlias(true); | |
float r = size/2f; | |
canvas.drawCircle(r, r, r, paint); | |
squaredBitmap.recycle(); | |
return bitmap; | |
} | |
@Override | |
public String key() { | |
return "circle"; | |
} | |
} |
thnx!
I get a Null pointer @julianshen. This is the stack Trace. Thanks for the help.
java.lang.NullPointerException: Transformation circle returned null after 0 previous transformation(s).
Finally after 3 hours of wasting my time on stackoverflow, I found this! Thanks a ton!
Thank you!!!!!!
We can use shader.setLocalMatrix()
method to draw circle bitmap not from source bitmap left-top. So, there is no need to create square bitmap! You can find the optimized version here: https://gist.github.com/codezjx/b8a99374385a0210edb9192bced516a3
Thank you
Thank you that's perfect !
Nice.
I'll star it
Excellent .........
how used it in main ?
Thanks @alxscms for gif config help.
Thanks @alexcms for GIF config
Exception: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference
Solution (As suggested by @alexcms) : Replace line 42 with
Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);
You saved my job, Thanks a lot man 👍
I need your help ! How can I custom Rounded ImageView depend radius !
Thanke you.
thanks, hero
Good stuff here, 👍
imageview has black backgound how change it to transparent
Nice!
Why it crop the image?
Try this for picasso 3: https://gist.github.com/G00fY2/f3fbc468570024930c1fd9eb4cec85a1
Thank you!!!
Cool!!!
Thanks!
On a huawei P10 Mate, applying this transformation is 5ms on average (in our case, ofc)
Thank you
I've incorporated alxscms suggested change so that the script works with gif and other palletted bitmaps: https://gist.github.com/dtygel/71b77481ff9ddec26646