25

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

  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;
    

替代文字

4

6 回答 6

6

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


}
于 2013-12-23T05:16:31.237 回答
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
于 2013-09-18T11:23:52.900 回答
2

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

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

我想到的另一种方法是在您的图像上绘制渐变(例如:径向渐变在中间是透明的,边缘是白色的 - 以获得白光)但是这种方式需要很多时间才能精确调整我认为你需要的东西不值得努力)。

此外,这里还有一个制作 java 图像过滤器的网站的链接。也许您可以找到适合您的工作。

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

于 2010-12-16T22:50:08.450 回答
1

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

于 2013-01-10T11:57:55.233 回答
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
于 2012-12-24T11:49:07.123 回答
-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

于 2011-08-07T06:30:50.953 回答