25

次のコードは、これまでに取得したものです。ただし、次の 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;
    

代替テキスト

4

6 に答える 6

6

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


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

アンドロイドにはグロー効果を作成する方法はないと思います。それらを最初から作成するか、これをサポートするJavaライブラリを見つける必要があります。

私が使用するのが好きな最も簡単なことは、画像のレイヤーを作成することです。基本的に、相対レイアウトを定義し、2つのimageViewを重ねて配置します。独自のレイヤーでフォトショップ効果を作成し、そのレイヤーをラスタライズして、pngに保存し、画像の上に配置します。ただし、大きなイメージでこの方法を使用している場合は、VMが例外を超えていることが簡単にわかります。ビューサイズに応じてビットマップをリサンプリングすることは、この問題のかなり良い解決策です。

私の頭に浮かぶもう1つの方法は、画像にグラデーションを描画することです(例:中央が透明で、エッジが白く放射状のグラデーション-白い輝きを得るには)この方法では、正確に調整するのにかなりの時間がかかります私の意見では、あなたが必要としているものは努力する価値がありません)。

また、Java画像フィルターを作成するサイトへのリンクもあります。多分あなたはあなたのために仕事をする何かを見つけることができます。

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

于 2010-12-16T22:50:08.450 に答える
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 に答える
1

これを行う方法は、カラー フィルターの輪郭を作成してからぼかします。この例が役に立つかもしれません: Android ビットマップの輪郭

于 2013-01-10T11:57:55.233 に答える
-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 に答える