0
자바에서 안드로이드 애플리케이션을 사용하려면 두 사진의 각 픽셀에 액세스하고 픽셀의 평균을 가져 와서 혼합 효과를주는 2 가지 사진을 혼합해야합니다. 각 픽셀에 액세스하는 방법을 알고 있지만 블렌딩의 평균이 올바른지 알 수 없습니다. 각 픽셀에 액세스하여 두 사진을 혼합하는 방법은 무엇입니까?
이
내 코드입니다 :import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView img;
private Bitmap bmp;
private ImageView img2;
private Bitmap bmp2;
private Bitmap operation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView)findViewById(R.id.imageView1);
BitmapDrawable abmp = (BitmapDrawable)img.getDrawable();
bmp = abmp.getBitmap();
img2 = (ImageView)findViewById(R.id.imageView2);
BitmapDrawable abmp2 = (BitmapDrawable)img2.getDrawable();
bmp2 = abmp2.getBitmap();
}
public void blend(View v){
operation= Bitmap.createBitmap(bmp.getWidth(),
bmp.getHeight(),bmp.getConfig());
for(int i=0; i<bmp.getWidth(); i++){
for(int j=0; j<bmp.getHeight(); j++){
int p = bmp.getPixel(i, j);
int p2 = bmp2.getPixel(i, j);
int r = Color.red(p);
int g = Color.green(p);
int b = Color.blue(p);
int r2 = Color.red(p2);
int g2 = Color.green(p2);
int b2 = Color.blue(p2);
r=(int)(r+r2)/2;
g=(int)(g+g2)/2;
b=(int)(b+b2)/2;
img2.setVisibility(View.INVISIBLE);
operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b));
}
}
img.setImageBitmap(operation);
}
다음과 같이 레이아웃이 간다 :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.blendpics.MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="114dp"
android:src="@drawable/pic1" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="114dp"
android:src="@drawable/pic2" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:onClick="blend"
android:text="blend" />
페이지에서 편집 한 내용을 처리하는 프로그램을 만들 수 있었지만 실제로는 느리게 실행됩니다. 어떤 방법 으로든 프로세스 속도를 향상시킬 수 있습니까? –
다중 스레드, 다중 스레드가있는 원시 코드 또는 RenderScript를 사용할 수 있습니다. –
도움 주셔서 감사합니다. –