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
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyCameraPreview = new ImageView(this);
if(checkCameraHardware(this)) {
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
preview.addView(MyCameraPreview);
tv = (TextView) findViewById(R.id.textView);
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(10);
runOnUiThread(new Runnable() {
@Override
public void run() {
checkColor(mPreview,10,10);
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
}
}
public void checkColor(View mPreview, int x, int y) {
//View container = findViewById(R.id.camera_preview);
Bitmap bitmap = loadBitmapFromView(mPreview);
if(bitmap!=null) {
tv.setText(String.valueOf(bitmap.getPixel(x,y)+" "+DateFormat.getDateTimeInstance().format(new Date())));
}else{
}
}
public Bitmap loadBitmapFromView(View v) {
v.clearFocus();
v.setPressed(false);
boolean willNotCache = v.willNotCacheDrawing();
v.setWillNotCacheDrawing(false);
// Reset the drawing cache background color to fully transparent
// for the duration of this operation
int color = v.getDrawingCacheBackgroundColor();
v.setDrawingCacheBackgroundColor(0);
if (color != 0) {
v.destroyDrawingCache();
}
v.buildDrawingCache();
Bitmap cacheBitmap = v.getDrawingCache();
if (cacheBitmap == null) {
Log.e(TAG, "failed getViewBitmap(" + v + ")", new RuntimeException());
return null;
}
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
// Restore the view
v.destroyDrawingCache();
v.setWillNotCacheDrawing(willNotCache);
v.setDrawingCacheBackgroundColor(color);
return bitmap;
}
Alles anzeigen