2014-11-30 3 views
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" /> 

답변

0

이 RenderScript 및 사용에 보라 혼합, ScriptIntrinsicBlend에 대한 고유 내장 : http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlend.html.

+0

페이지에서 편집 한 내용을 처리하는 프로그램을 만들 수 있었지만 실제로는 느리게 실행됩니다. 어떤 방법 으로든 프로세스 속도를 향상시킬 수 있습니까? –

+0

다중 스레드, 다중 스레드가있는 원시 코드 또는 RenderScript를 사용할 수 있습니다. –

+0

도움 주셔서 감사합니다. –