Как сделать эффект свечения вокруг растрового изображения? - PullRequest
24 голосов
/ 02 декабря 2010

Следующий код - это то, что я получил до сих пор.Однако есть 2 проблемы:

  1. Мне нужны как внутренние, так и внешние эффекты свечения, которые похожи на параметры наложения в Photoshop.Но мне удалось только сделать внешнее свечение, если я установлю BlurMaskFilter.Blur.INNER или другое значение, все изображение будет заблокировано, а не только края.

  2. Несмотря на то, что я установил "FF"как альфа-значение, цвет свечения по-прежнему очень темный.

    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

Ответы [ 6 ]

4 голосов
/ 23 декабря 2013

Попробуйте, основываясь на ответе XGouchet .

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 голосов
/ 18 сентября 2013

вот решение:

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

это позволит решить ваш вопрос для получения дополнительных растровых эффектов изображения. Посетите эти ссылки в блоге:

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
1 голос
/ 10 января 2013

Способ сделать это - создать контур цветового фильтра, а затем размыть его Этот пример может помочь: Контур растрового изображения Android

1 голос
/ 24 декабря 2012
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 голос
/ 17 декабря 2010

Я думаю, что в Android нет метода для создания эффектов свечения. Вы должны сделать их самостоятельно с нуля или найти библиотеку Java, которая поддерживает это.

Самая простая вещь, которую я предпочитаю использовать, это создавать слои изображений. в основном вы определяете относительную компоновку и помещаете 2 imageViews один поверх другого. просто создайте эффект фотошопа в его собственном слое и растеризуйте этот слой, сохраните его в png и поместите поверх вашего изображения. Но будьте осторожны, если вы используете этот метод с большими образами, вы можете легко получить, что VM превысила исключение. Решающим фактором для этой проблемы является пересчет растровых изображений в соответствии с размером представления.

другой метод, который приходит мне в голову, - это рисование градиентов над вашим изображением (например, радиальный градиент, который является прозрачным в середине и белым по краям - для получения белого свечения), но этот способ требует много времени для настройки до именно того, что вам нужно, так что, по моему мнению, не стоит усилий).

Также здесь есть ссылка на сайт, который делает фильтры изображений Java. может, ты найдешь что-нибудь, что сделает за тебя работу.

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

0 голосов
/ 07 августа 2011

Как насчет этого:

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

найдено здесь: http://blog.stylingandroid.com/archives/378:

...