2016-04-15 63 views
1

該線條用與背景顏色不同的顏色繪製。然後將位圖放在畫布中的數組中。如果數組中給定點的顏色與線的顏色相同,則該點位於該線中。另外,我不想在我的應用程序中顯示畫布。Android:如何檢測由畫布繪製的線條中的點?

import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 
    private Button btnCheck; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnCheck = (Button) findViewById(R.id.btn_check); 
     btnCheck.setOnClickListener(click); 
    } 

    private View.OnClickListener click = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      int width = 60, height =60; 
      int startX = 15, startY = 8; 
      int stopX = 15, stopY = 20; 

      Paint paint = new Paint(); 
      paint.setStrokeWidth(5); 
      paint.setColor(Color.RED); 

      Bitmap baseBitmap; 
      Canvas canvas; 

      baseBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
      canvas = new Canvas(baseBitmap); 
      canvas.drawColor(Color.WHITE); 

      canvas.drawLine(startX, startY, stopX, stopY, paint); 

      int[] arrImage = new int[width*height]; 
      baseBitmap.setPixels(arrImage, 0, width, 0, 0, width, height); 

      int[][] points = new int[][]{ 
        {15, 8},{15, 10}, 
        {30, 30},{40, 40}}; 

      String result = ""; 
      for (int i=0; i<points.length; ++i) { 
       int index = getPixelIndex(width, points[i][0], points[i][1]); 
       result = result + ":" + (arrImage[index] == Color.RED); 
      } 
      Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 

     } 
    }; 

    public int getPixelIndex(int imageWidth, int pos_x, int pos_y) { 
     return pos_y * imageWidth + pos_x; 
    } 

} 

但是,四個結果都是false這不是我預期的結果。 我的代碼有哪些錯誤?

回答

0

你的問題是這樣的線:

baseBitmap.setPixels(arrImage, 0, width, 0, 0, width, height); 

setPixels()方法與傳遞的陣列,其中,在這種情況下,是全零代替了Bitmap的像素數據。它不會更改數組的值,所以在進行比較時它們仍然全爲零。

您需要改爲getPixels()方法。