如何围绕位图制作发光效果?

时间:2010-12-02 11:18:05

标签: android graphics bitmap glow

以下代码是我到目前为止所得到的。但是,有两个问题:

  1. 我想要内部和外部的发光效果,看起来类似于Photoshop的混合选项。但是我只设法制作外部发光,如果我设置BlurMaskFilter.Blur.INNER或其他值,则整个图像被阻挡,而不仅仅是边缘。

  2. 尽管我将“ FF ”设为alpha值,但发光颜色仍然很暗。

    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;
    
  3. alt text

6 个答案:

答案 0 :(得分:4)

这是解决方案:

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 :(得分:4)

根据XGouchet's answer尝试此操作。

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


}

答案 2 :(得分:1)

我认为android中没有方法可以创建发光效果。你必须从头开始自己制作它们或者找一些支持它的java库。

我最喜欢使用的最简单的方法是制作图像层。基本上你定义了一个相对布局,并将2个imageViews放在另一个上面。只需在自己的图层中创建photoshop效果并栅格化该图层,将其保存到png,将其放在图像上。但是,如果您对大图像使用此方法,则可以轻松获得该VM超出异常。根据视图大小重新采样位图是解决此问题的一个非常好的解决方案。

我想到的另一种方法是在图像上绘制渐变(例如:中间透明的径向渐变和边缘之间的白色 - 以获得白色光晕)但这种方式需要花费大量时间来调整直到你需要的,所以在我看来是不值得的努力。)

此处还有一个用于制作java图像过滤器的网站的链接。也许你可以找到适合你的工作。

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

这样做的方法是创建一个滤色器轮廓,然后模糊它。此示例可能有所帮助:  Android Bitmap contour

答案 5 :(得分:-2)

这个怎么样:

<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