2013-01-12 1 views
0

Это код, который я использую для преобразования двух цветных изображений в оттенки серого и сравнения их по пикселям. Тем не менее, мое приложение удерживает силу. вот код:Преобразование ColorBitmap в GrayscaleBitmap продолжает сбой

public boolean equals(Bitmap bitmap1, Bitmap bitmap2) { 
     Bitmap grayscaleBitmap1 = Bitmap.createBitmap(
       bitmap1.getWidth(), bitmap1.getHeight(), 
       Bitmap.Config.RGB_565); 

      Canvas c = new Canvas(grayscaleBitmap1); 
      Paint p = new Paint(); 
      ColorMatrix cm = new ColorMatrix(); 

      cm.setSaturation(0); 
      ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm); 
      p.setColorFilter(filter); 
      c.drawBitmap(bitmap1, 0, 0, p); 
      Bitmap grayscaleBitmap2 = Bitmap.createBitmap(
        bitmap2.getWidth(), bitmap2.getHeight(), 
        Bitmap.Config.RGB_565); 
      Canvas c1 = new Canvas(grayscaleBitmap2); 
      c1.drawBitmap(bitmap2, 0, 0, p);  
     ByteBuffer buffer1 = ByteBuffer.allocate(grayscaleBitmap1.getHeight() 
       * grayscaleBitmap1.getRowBytes()); 
     grayscaleBitmap1.copyPixelsToBuffer(buffer1); 

     ByteBuffer buffer2 = ByteBuffer.allocate(grayscaleBitmap2.getHeight() 
       * grayscaleBitmap2.getRowBytes()); 
     grayscaleBitmap2.copyPixelsToBuffer(buffer2); 

     return Arrays.equals(buffer1.array(), buffer2.array()); 
    } 

Вот logcat.

ответ

1
01-12 10:12:48.947: E/AndroidRuntime(2052): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
01-12 10:12:48.947: E/AndroidRuntime(2052):  at android.os.Handler.<init>(Handler.java:121) 
01-12 10:12:48.947: E/AndroidRuntime(2052):  at android.widget.Toast.<init>(Toast.java:68) 

Эти строки говорят, что вы написали Toast где-то в своей асинхронной задаче. поставьте свой тост в runOnUiThread(); как показано ниже:

runOnUiThread(new Runnable() {   
      @Override 
      public void run() { 
      Toast.makeText(yourActivity.this, "your Text Here!",1000).show();        
      } 
    }); 

и все готово.

+0

Это было неуклюже меня. Благодарю. –

+0

Я написал, как вы должны писать this.please check –

+0

Я знаю, как это сделать, просто вставил некоторый код в AsyncTask и не понял, что у него есть Toast. –