2017-03-07 16 views
1

私は画像でこれを達成しようとしている - リストの項目をクリックするだけでスクランブル画像と呼ばアンドロイドで画像(画像操作)をスクランブルする方法は?

enter image description here

を。

問題は私がこれを達成することができず、古いイメージとしてスクランブルされていないイメージを取得していることです。任意の正の回答は理解されるであろう

public class MainActivity extends AppCompatActivity { 

static final String CAMERA_PIC_DIR = "/DCIM/Camera/"; 
ImageView iv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv = (ImageView) findViewById(R.id.my_image); 
    String ImageDir = Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + CAMERA_PIC_DIR; 
    Intent i = new Intent(this, ListFiles.class); 
    i.putExtra("directory", ImageDir); 
      startActivityForResult(i,0); 
} 
@Override 
protected void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == 0 && resultCode==RESULT_OK) { 
     String tmp = data.getExtras().getString("clickedFile"); 
     Bitmap ImageToChange= BitmapFactory.decodeFile(tmp); 
     process_image(ImageToChange); 
    } 
} 
void process_image(Bitmap image) { 
    Bitmap bm = Bitmap.createScaledBitmap(image, 480, 320, false); 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    int x= width>>1; 
    int y= height>>1; 
    int[] pixels1 = new int[(width*height)]; 
    int[] pixels2 = new int[(width*height)]; 
    int[] pixels3 = new int[(width*height)]; 
    int[] pixels4 = new int[(width*height)]; 
    bm.getPixels(pixels1, 0, width, 0, 0, width>>1, height>>1); 
    bm.getPixels(pixels2, 0, width, x, 0, width>>1, height>>1); 
    bm.getPixels(pixels3, 0, width, 0, y, width>>1, height>>1); 
    bm.getPixels(pixels4, 0, width, x, y, width>>1, height>>1); 
    if(bm.isRecycled()) { 
     bm.setPixels(pixels2, 0, width, 0, 0, width>>1, height>>1); 
     bm.setPixels(pixels4, 0, width, x, 0, width>>1, height>>1); 
     bm.setPixels(pixels1, 0, width, 0, y, width>>1, height>>1); 
     bm.setPixels(pixels3, 0, width, x, y, width>>1, height>>1); 
    } 
    iv.setImageBitmap(bm); 
} 
} 

は、ここでの主な活動の私のコードです。

事前にお世話になりました!

+1

'if(bm.isRecycled()) '条件を削除してみてください。すべて正常に動作するはずです – vasart

+0

isRecycled()を何に置き換えますか? –

+1

これを '!bm.isRecycled() 'に置き換えてください – vasart

答えて

1

あなたはトリックを行う必要がありますif(isMutable())

これによりif(isRecycled())を置き換えることができます!

+0

私は上記の解決策で私の問題を解決しましたが、あなたの解決策も機能するはずです。 –

関連する問題