Pixel von View dauerhaft und schnell auf Farbe überprüfen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Pixel von View dauerhaft und schnell auf Farbe überprüfen

    Hi Leute,

    ich würde gerne eine kleine app schreiben welche via Kamera die Pixel genau in der Mitte auf die Farbe überprüft und das dauerhaft, sodass ich einen Farbabweichung schnells möglich mitbekomme und daraufhin ein event trigger kann.

    Also Quasi eine art Sensor der mir eine veränderung an einem pixel mitteilt.

    Mein bisherigen versuche sind noch nicht all zu vielversprechend.

    zwei probleme:

    1. die bitmap.getPixel(x,y) gibt mir immer "0" zurück

    2. die Geschwindigkeit ist viel zu langsam

    hat einer einen Vorschlag wie ich die Probleme ausmerzen kann?

    Dank euch

    Java-Quellcode

    1. @Override
    2. public void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. setContentView(R.layout.main);
    5. MyCameraPreview = new ImageView(this);
    6. if(checkCameraHardware(this)) {
    7. // Create an instance of Camera
    8. mCamera = getCameraInstance();
    9. // Create our Preview view and set it as the content of our activity.
    10. mPreview = new CameraPreview(this, mCamera);
    11. FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    12. preview.addView(mPreview);
    13. preview.addView(MyCameraPreview);
    14. tv = (TextView) findViewById(R.id.textView);
    15. Thread t = new Thread() {
    16. @Override
    17. public void run() {
    18. try {
    19. while (!isInterrupted()) {
    20. Thread.sleep(10);
    21. runOnUiThread(new Runnable() {
    22. @Override
    23. public void run() {
    24. checkColor(mPreview,10,10);
    25. }
    26. });
    27. }
    28. } catch (InterruptedException e) {
    29. }
    30. }
    31. };
    32. t.start();
    33. }
    34. }
    35. public void checkColor(View mPreview, int x, int y) {
    36. //View container = findViewById(R.id.camera_preview);
    37. Bitmap bitmap = loadBitmapFromView(mPreview);
    38. if(bitmap!=null) {
    39. tv.setText(String.valueOf(bitmap.getPixel(x,y)+" "+DateFormat.getDateTimeInstance().format(new Date())));
    40. }else{
    41. }
    42. }
    43. public Bitmap loadBitmapFromView(View v) {
    44. v.clearFocus();
    45. v.setPressed(false);
    46. boolean willNotCache = v.willNotCacheDrawing();
    47. v.setWillNotCacheDrawing(false);
    48. // Reset the drawing cache background color to fully transparent
    49. // for the duration of this operation
    50. int color = v.getDrawingCacheBackgroundColor();
    51. v.setDrawingCacheBackgroundColor(0);
    52. if (color != 0) {
    53. v.destroyDrawingCache();
    54. }
    55. v.buildDrawingCache();
    56. Bitmap cacheBitmap = v.getDrawingCache();
    57. if (cacheBitmap == null) {
    58. Log.e(TAG, "failed getViewBitmap(" + v + ")", new RuntimeException());
    59. return null;
    60. }
    61. Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
    62. // Restore the view
    63. v.destroyDrawingCache();
    64. v.setWillNotCacheDrawing(willNotCache);
    65. v.setDrawingCacheBackgroundColor(color);
    66. return bitmap;
    67. }
    Alles anzeigen
  • Hi,

    sollte nicht so schwierig sein. Versuche es mal mit dem Code:

    Quellcode

    1. Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
    2. int pixel = bitmap.getPixel(x,y);
    3. int redValue = Color.red(pixel);
    4. int blueValue = Color.blue(pixel);
    5. int greenValue = Color.green(pixel);