今天调试了一个慕课网上的小程序,功能是通过HSI 来调整图像的色调,饱和度,亮度。一开始虚拟机出现App has stopped 后面经过调试 app成功运行 出现Bug的原因是没有创建
setContentView(R.layout.primary_color);
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.meituxiuxiu">
package com.androidzhangting.meituxiuxiu; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; public class ImageHelper { public static Bitmap handleImageEffect(Bitmap bm,float hue,float saturation,float lum){ Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas=new Canvas(bmp); Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG); ColorMatrix hueMatrix=new ColorMatrix(); hueMatrix.setRotate(0,hue); hueMatrix.setRotate(1,hue); hueMatrix.setRotate(2,hue); ColorMatrix saturationMatrix=new ColorMatrix(); saturationMatrix.setSaturation(saturation); ColorMatrix lumMatrix=new ColorMatrix(); lumMatrix.setScale(lum,lum,lum,1); ColorMatrix imageMatrix=new ColorMatrix(); imageMatrix.postConcat(hueMatrix); imageMatrix.postConcat(saturationMatrix); imageMatrix.postConcat(lumMatrix); paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix)); canvas.drawBitmap(bm,0,0,paint); return bmp; } }
package com.androidzhangting.meituxiuxiu; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.annotation.Nullable; import android.widget.ImageView; import android.widget.SeekBar; public class PrimaryColor extends Activity implements SeekBar.OnSeekBarChangeListener { private ImageView mimageView; private SeekBar mSeekbarHue, mSeekbarSaturation, mSeekbarLum; private static int MAX_VALUE = 255; private static int MID_VALUE = 127; private float mHue, mSaturation, mLum; private Bitmap bitmap; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.primary_color); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pubu); mimageView = (ImageView) findViewById(R.id.imageview); mSeekbarHue = (SeekBar) findViewById(R.id.seekbarHue); mSeekbarSaturation = (SeekBar) findViewById(R.id.seekbarSaturation); mSeekbarLum = (SeekBar) findViewById(R.id.seekbarLum); mSeekbarHue.setOnSeekBarChangeListener(this); mSeekbarSaturation.setOnSeekBarChangeListener(this); mSeekbarLum.setOnSeekBarChangeListener(this); mSeekbarHue.setMax(MAX_VALUE); mSeekbarSaturation.setMax(MAX_VALUE); mSeekbarLum.setMax(MAX_VALUE); mSeekbarHue.setProgress(MID_VALUE); mSeekbarSaturation.setProgress(MID_VALUE); mSeekbarLum.setProgress(MID_VALUE); mimageView.setImageBitmap(bitmap); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch (seekBar.getId()) { case R.id.seekbarHue: mHue = (progress - MID_VALUE) * 1.0f / MID_VALUE * 180; break; case R.id.seekbarSaturation: mSaturation = progress * 1.0f / MID_VALUE; break; case R.id.seekbarLum: mLum = progress * 1.0f / MID_VALUE; break; } mimageView.setImageBitmap(ImageHelper.handleImageEffect(bitmap, mHue, mSaturation, mLum)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" android:paddingBottom="16dp" android:paddingTop="16dp" android:paddingRight="16dp" android:paddingLeft="16dp" tools:context=".MeiTuXiuXiuActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="40dp" android:text="美图秀秀" android:textSize="40sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.146" /> <Button android:id="@+id/buttonhue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PrimaryColor" android:onClick="btnPrimaryColor" tools:layout_editor_absoluteX="148dp" tools:layout_editor_absoluteY="184dp" /> <Button android:id="@+id/buttonsaturation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="NewButton" tools:layout_editor_absoluteX="148dp" tools:layout_editor_absoluteY="280dp" /> <Button android:id="@+id/buttonlum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="NewButton" tools:layout_editor_absoluteX="128dp" tools:layout_editor_absoluteY="382dp" /> </LinearLayout>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MeiTuXiuXiuActivity">
package com.androidzhangting.meituxiuxiu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MeiTuXiuXiuActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mei_tu_xiu_xiu); } public void btnPrimaryColor(View view){ startActivity(new Intent(this,PrimaryColor.class)); } }
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".PrimaryColor"/> </application></manifest>