knuckletouch/viewer/app/src/main/java/io/interactionlab/capimgdemo/DrawView.java

112 lines
3.5 KiB
Java

package io.interactionlab.capimgdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;
import org.hcilab.libftsp.capacitivematrix.blobdetection.BlobBoundingBox;
import org.hcilab.libftsp.capacitivematrix.capmatrix.CapacitiveImageTS;
import java.util.List;
/**
* Created by Huy on 12/12/2017.
*/
public class DrawView extends View {
private final Paint paint = new Paint();
private CapacitiveImageTS capacitiveImage;
private List<BlobBoundingBox> bbbl;
private List<String> labels;
private List<Integer> colors;
public DrawView(Context context) {
super(context);
}
public void updateView(CapacitiveImageTS capacitiveImage) {
this.capacitiveImage = capacitiveImage;
invalidate();
}
public void updateView(CapacitiveImageTS capacitiveImage, List<BlobBoundingBox> bbbl, List<String> labels, List<Integer> colors) {
this.capacitiveImage = capacitiveImage;
this.bbbl = bbbl;
this.labels = labels;
this.colors = colors;
invalidate();
}
private void onDrawCNN(Canvas canvas, int boxWidth, int boxHeight) {
if (bbbl != null) {
// Draw Labels
for (int i = 0; i < bbbl.size(); i++) {
BlobBoundingBox bbb = bbbl.get(i);
paint.setColor(this.colors.get(i));
paint.setStyle(Paint.Style.STROKE);
Rect r = new Rect(bbb.x1 * boxWidth, bbb.y1 * boxHeight, bbb.x2 * boxWidth, bbb.y2 * boxHeight);
canvas.drawRect(r, paint);
paint.setTextSize(45);
canvas.drawText(labels.get(i), bbb.x1 * boxWidth - (int) (1.0 * boxWidth), bbb.y1 * boxHeight - (int) (1.0 * boxHeight), paint);
}
}
}
private void onDrawLSTMCNN(Canvas canvas, int boxWidth, int boxHeight) {
if (!labels.isEmpty()) {
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
Rect r = new Rect(boxWidth, 5 * boxHeight, 14 * boxWidth, 10 * boxHeight);
canvas.drawRect(r, paint);
paint.setTextSize(45);
canvas.drawText(labels.get(0), 2 * boxWidth, 7 * boxHeight, paint);
}
}
@Override
public void onDraw(Canvas canvas) {
int boxWidth = 1080 / 15;
int boxHeight = 1920 / 27;
if (capacitiveImage == null) {
return;
}
paint.setStyle(Paint.Style.FILL);
int[][] matrix = capacitiveImage.getMatrix();
// Draw capacitive matrix
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
int val = matrix[i][j];
if (val < 0)
val = 0;
if (val > 255)
val = 255;
// Draw rectangle
paint.setColor(new Color().rgb(val, val, val));
paint.setStyle(Paint.Style.FILL);
Rect r = new Rect(j * boxWidth, (i) * boxHeight, (j + 1) * boxWidth, (i + 1) * boxHeight);
canvas.drawRect(r, paint);
// Write number
paint.setTextSize(15);
paint.setColor(new Color().rgb(255 - val, 255 - val, 255 - val));
canvas.drawText(val + "", j * boxWidth + (int) (0.5 * boxWidth), i * boxHeight + (int) (0.5 * boxHeight), paint);
}
}
//onDrawLSTMCNN(canvas, boxWidth, boxHeight);
}
}