如何在Android中使用位图(效果)?
我想给Android中的图像添加一些效果。我正在导入中的库文件。我只是Android开发的新手。有人能提供一个关于如何使用库文件中的方法的小例子吗?提前谢谢。圣诞快乐,伙计们。我也试过一个例子。但我对实现这个示例感到困惑 代码:如何在Android中使用位图(效果)?,android,bitmap,image-enhancement,Android,Bitmap,Image Enhancement,我想给Android中的图像添加一些效果。我正在导入中的库文件。我只是Android开发的新手。有人能提供一个关于如何使用库文件中的方法的小例子吗?提前谢谢。圣诞快乐,伙计们。我也试过一个例子。但我对实现这个示例感到困惑 代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activi
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.butterfly_image);
iv.setImageBitmap(src);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(this);
}
public void onClick(View arg0) {
iv = (ImageView) findViewById(R.id.butterfly_image);
System.out.println("Inside onClick()");
src = doHighlightImage(src);
System.out.println("doHighlightImage has been passed");
iv.setImageBitmap(src);
}
public static Bitmap doHighlightImage(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;
}
12-25 16:14:45.150: I/System.out(13695): Inside onClick()
12-25 16:14:45.150: W/dalvikvm(13695): threadid=1: thread exiting with uncaught exception (group=0x4118d438)
12-25 16:14:45.160: E/AndroidRuntime(13695): FATAL EXCEPTION: main
12-25 16:14:45.160: E/AndroidRuntime(13695): java.lang.NullPointerException
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.example.effects.MainActivity.doHighlightImage(MainActivity.java:47)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.example.effects.MainActivity.onClick(MainActivity.java:41)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.view.View.performClick(View.java:4101)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.view.View$PerformClick.run(View.java:17082)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Handler.handleCallback(Handler.java:615)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Handler.dispatchMessage(Handler.java:92)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Looper.loop(Looper.java:137)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.app.ActivityThread.main(ActivityThread.java:4954)
12-25 16:14:45.160: E/AndroidRuntime(13695): at java.lang.reflect.Method.invokeNative(Native Method)
12-25 16:14:45.160: E/AndroidRuntime(13695): at java.lang.reflect.Method.invoke(Method.java:511)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
12-25 16:14:45.160: E/AndroidRuntime(13695): at dalvik.system.NativeStart.main(Native Method)
我不确定上述代码的实现是否正确。它没有按预期执行,所以我猜它错了。我的logcat在调用该方法时显示NullPointerException
Logcat:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.butterfly_image);
iv.setImageBitmap(src);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(this);
}
public void onClick(View arg0) {
iv = (ImageView) findViewById(R.id.butterfly_image);
System.out.println("Inside onClick()");
src = doHighlightImage(src);
System.out.println("doHighlightImage has been passed");
iv.setImageBitmap(src);
}
public static Bitmap doHighlightImage(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;
}
12-25 16:14:45.150: I/System.out(13695): Inside onClick()
12-25 16:14:45.150: W/dalvikvm(13695): threadid=1: thread exiting with uncaught exception (group=0x4118d438)
12-25 16:14:45.160: E/AndroidRuntime(13695): FATAL EXCEPTION: main
12-25 16:14:45.160: E/AndroidRuntime(13695): java.lang.NullPointerException
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.example.effects.MainActivity.doHighlightImage(MainActivity.java:47)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.example.effects.MainActivity.onClick(MainActivity.java:41)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.view.View.performClick(View.java:4101)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.view.View$PerformClick.run(View.java:17082)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Handler.handleCallback(Handler.java:615)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Handler.dispatchMessage(Handler.java:92)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.os.Looper.loop(Looper.java:137)
12-25 16:14:45.160: E/AndroidRuntime(13695): at android.app.ActivityThread.main(ActivityThread.java:4954)
12-25 16:14:45.160: E/AndroidRuntime(13695): at java.lang.reflect.Method.invokeNative(Native Method)
12-25 16:14:45.160: E/AndroidRuntime(13695): at java.lang.reflect.Method.invoke(Method.java:511)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
12-25 16:14:45.160: E/AndroidRuntime(13695): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
12-25 16:14:45.160: E/AndroidRuntime(13695): at dalvik.system.NativeStart.main(Native Method)
我还从StackOverFlow中的某些帖子中了解到,来自的一些示例并没有像预期的那样工作。任何帮助都将不胜感激圣诞快乐。我猜您的
src
位图变量为空。您需要按如下方式分配图像:并且不需要初始化ImageView
两次,因为您已经在onCreate()
按如下所示更改onClick代码:
Bitmap src= ((BitmapDrawable)iv.getDrawable()).getBitmap();
public void onClick(View arg0) {
System.out.println("Inside onClick()");
src = doHighlightImage(src);
System.out.println("doHighlightImage has been passed");
iv.setImageBitmap(src);
}
要从ImageView
获取图像,您需要按如下方式获取图像:
Bitmap src= ((BitmapDrawable)iv.getDrawable()).getBitmap();
public void onClick(View arg0) {
System.out.println("Inside onClick()");
src = doHighlightImage(src);
System.out.println("doHighlightImage has been passed");
iv.setImageBitmap(src);
}
你可以在这里看到我的答案。这将有助于有效地处理位图
src是位图变量。您是否为位图分配了任何图像?无需在onClick中重新初始化imageview在onCreate上单击其已初始化的
onCreate
否我没有任何图像到位图,但我在imageview中有一个图像,并通过iv.setImageBitmap(src)将其设置为位图。但不确定它是否能工作。@San第47行是什么MainActivity.java
?现在实现它。我会让你知道结果的,这很有效。谢谢,朋友。如果可以的话,我还有另一个疑问?@San是的,告诉我你的疑问是什么?当我尝试重复这些效果时,我得到一个OutOfMemory异常,我相信这在使用位图时是正常的。我已经浏览并找到了链接。如果我在一个活动中添加多个效果,是否会导致异常??上面提到的链接仅适用于相同大小的位图图像,但我想将这些效果添加到用户动态拍摄的照片中。有可能避免这个异常吗?其实这是可能的,但是你不能完全忽略这个错误。在处理图像时,您将始终面临此错误。它可以通过调整图像大小和缩小其大小来解决。谢谢Kailash,确实非常有用。