【问题标题】:How to make glow effect around a bitmap?如何在位图周围制作发光效果?
【发布时间】:2011-05-19 01:45:47
【问题描述】:

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

  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;
    

【问题讨论】:

    标签: android graphics bitmap glow


    【解决方案1】:

    试试这个,基于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】:

    解决办法如下:

    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
    

    【讨论】:

      【解决方案3】:

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

      我更喜欢使用的最简单的方法是制作图像层。基本上,您定义了一个相对布局并将 2 个 imageViews 一个放在另一个之上。只需在其自己的图层中创建 Photoshop 效果并栅格化该图层,将其保存为 png 并将其放在图像的顶部。但要小心,如果您对大图像使用此方法,您很容易得到 VM 超出异常。根据视图大小重新采样位图是解决这个问题的一个很好的解决方案。

      我想到的另一种方法是在您的图像上绘制渐变(例如:径向渐变,中间透明,边缘为白色 - 以获得白光)但是这种方式需要很多时间来调整完全符合您的需要,因此我认为不值得付出努力)。

      这里还有一个用于制作 Java 图像过滤器的网站的链接。也许你能找到适合你的东西。

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

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          【解决方案5】:

          这样做的方法是创建一个滤色器轮廓,然后对其进行模糊处理。这个例子可能会有所帮助: Android Bitmap contour

          【讨论】:

            【解决方案6】:

            这个怎么样:

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

            【讨论】:

              最近更新 更多