Comment faire un effet de lueur autour d'un bitmap?

Le code suivant est ce que j'ai obtenu jusqu'à présent. Toutefois, il y a deux questions:

  1. je veux des effets de lueur interne et externe, qui ressemblent aux options de mélange de Photoshop. Mais j'ai seulement réussi à faire la lueur extérieure, si je mets BlurMaskFilter.Blur.INNER ou une autre valeur, l'image entière est bloquée, au lieu de juste les bords.

  2. malgré que j'ai mis " FF " comme valeur alpha, la couleur de la lueur est encore très sombre.

    Bitmap alpha = origin.extractAlpha();
    BlurMaskFilter blurMaskFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER);
    
    Paint paint = new Paint();
    paint.setMaskFilter(blurMaskFilter);
    paint.setColor(0xffffffff);
    
    Canvas canvas = new Canvas(origin);
    canvas.drawBitmap(alpha, 0, 0, paint);
    
    return origin;
    

alt text

24
demandé sur Bojan Kseneman 2010-12-02 14:18:04

6 réponses

voici la solution:

http://www.shaikhhamadali.blogspot.ro/2013/06/highlightfocusshadow-image-in-imageview.html

 public Bitmap highlightImage(Bitmap src) {
        // create new bitmap, which will be painted and becomes result image
        Bitmap bmOut = Bitmap.createBitmap(src.getWidth() + 96, src.getHeight() + 96, Bitmap.Config.ARGB_8888);
        // setup canvas for painting
        Canvas canvas = new Canvas(bmOut);
        // setup default color
        canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        // create a blur paint for capturing alpha
        Paint ptBlur = new Paint();
        ptBlur.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
        int[] offsetXY = new int[2];
        // capture alpha into a bitmap
        Bitmap bmAlpha = src.extractAlpha(ptBlur, offsetXY);
        // create a color paint
        Paint ptAlphaColor = new Paint();
        ptAlphaColor.setColor(0xFFFFFFFF);
        // paint color for captured alpha region (bitmap)
        canvas.drawBitmap(bmAlpha, offsetXY[0], offsetXY[1], ptAlphaColor);
        // free memory
        bmAlpha.recycle();

        // paint the image source
        canvas.drawBitmap(src, 0, 0, null);

        // return out final image
        return bmOut;
    }

ce sera dove votre question pour plus d'image effets bitmap visitez ces liens sur le blog:

www.shaikhhamadali.blogspot.com

Highlight/focus/shadow the image in ImageView
Invert the Image in ImageView
Gray Scale the Image in ImageView (Android)
set Gamma of image in ImageView
Saturation Filter Effect on image in ImageView
Hue Filter Effect on image in ImageView
Engraving Effect on image in ImageView
Emboss Effect on image in ImageView
Smooth Effect on image in ImageView
Mean Removal Effect on image in ImageView
Set sharpness of the image in ImageView
Gaussian Blur the image(Bitmap) in ImageView
Convolution Matrix for image processing
Color Boost the image(Bitmap) in ImageView
Set brightness of the image(increase,decrease) in ImageView
B/W Contrast and Color Contrast the image in ImageView 
Reducing color depth of image in ImageView
Sepia-toning Effect (Photography) of image in ImageView
filter color channels/ set color channels of image in ImageView
Change/Replacement/Remove pixel colors in ImageView
Water Mark the Image in ImageView
4
répondu Hamad 2013-09-18 11:23:52

essayez celui-ci.

private void setBackgroundGlow(ImageView imgview, int imageicon,int r,int g,int b)
{
// An added margin to the initial image
    int margin = 24;
    int halfMargin = margin / 2;
    // the glow radius
    int glowRadius = 40;

    // the glow color
    int glowColor = Color.rgb(r, g, b);

    // The original image to use
    Bitmap src = BitmapFactory.decodeResource(getResources(),imageicon);

    // extract the alpha from the source image
    Bitmap alpha = src.extractAlpha();

    // The output bitmap (with the icon + glow)
    Bitmap bmp =  Bitmap.createBitmap(src.getWidth() + margin, src.getHeight() + margin, Bitmap.Config.ARGB_8888);

    // The canvas to paint on the image
    Canvas canvas = new Canvas(bmp);

    Paint paint = new Paint();
    paint.setColor(glowColor);

    // outer glow
    paint.setMaskFilter(new BlurMaskFilter(glowRadius, Blur.OUTER));//For Inner glow set Blur.INNER
    canvas.drawBitmap(alpha, halfMargin, halfMargin, paint);

    // original icon
    canvas.drawBitmap(src, halfMargin, halfMargin, null);

    imgview.setImageBitmap(bmp);


}
4
répondu Nik 2013-12-23 05:16:31

je pense qu'il n'y a pas de méthode dans android pour créer des effets de lueur. vous devez les faire vous-même à partir de zéro ou trouver une bibliothèque java qui soutient ceci.

la chose la plus simple que je préfère utiliser est de faire des couches d'images. fondamentalement, vous définissez une mise en page relative et mettez 2 imageViews l'un sur l'autre. il suffit de créer l'effet photoshop dans sa propre couche et rastériez cette couche, enregistrez-la à png placez-la sur le dessus de votre image. Mais attention, si vous utilisez cette méthode avec de grandes images, vous pouvez facilement obtenir que VM dépassé exception. Rééchantillonner les bitmaps en fonction de la taille de la vue est une très bonne solution pour ce problème.

l'autre méthode qui me vient à l'esprit est de dessiner des gradients sur votre image (ex: gradient radial qui est transparent au milieu et blanc parmi les bords - pour obtenir une lueur blanche) mais cette façon prend beaucoup de temps pour accorder exactement ce que vous avez besoin afin à mon avis n'est pas la peine de l'effort).

aussi voici un lien pour un site qui fait des filtres d'image java. peut-être que vous pouvez trouver quelque chose qui fait le travail pour vous.

http://www.jhlabs.com/ip/filters/index.html

1
répondu DArkO 2010-12-16 22:50:08
BlurMaskFilter.Blur.NORMAL maybe fit your necessary.

Comments from official:
NORMAL(0),  //!< blur inside and outside of the original border
SOLID(1),   //!< include the original mask, blur outside
OUTER(2),   //!< just blur outside the original border
INNER(3);   //!< just blur inside the original border
1
répondu marine8888 2012-12-24 11:49:07

la façon de faire ceci est de créer un contour de filtre de couleur, puis le brouiller. Cet exemple peut aider: contour Bitmap Android

1
répondu Lumis 2017-05-23 12:13:39

Que pensez-vous de ceci:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@color/Black"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:textColor="@color/White"
    android:layout_width="wrap_content"
    android:text="Glowing Text"
    android:layout_height="wrap_content"
    android:padding="2dp"
    android:shadowColor="@color/White"
    android:shadowDx="0"
    android:shadowDy="0"
    android:shadowRadius="3" />
 </LinearLayout>

trouvés ici: http://blog.stylingandroid.com/archives/378 :

-2
répondu xxxx_8 2011-08-07 06:30:50