다음과 같이 작성이 되있는데요
여기서 비트맵 좌표값을 블루투스를 통해서 보내고 싶은데 방법을 모르겠습니다
다른 질문들을 보던 중에 public static을 활용하라고 하던 답변이 있었는데
나름 보고도 감이 안잡혀서 이렇게 질문드립니다.
블루투스 연동은 확인 하였습니다만 좌표 데이터를 보내는 방법을 모르겠어서 구글링으로
시간을 보내고 있습니다...도와주시면 감사하겠습니다.
@Override
public void onImageAvailable(final ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
if (image == null) {
return;
}
// No mutex needed as this method is not reentrant.
if (mIsComputing) {
image.close();
return;
}
mIsComputing = true;
Trace.beginSection("imageAvailable");
final Plane[] planes = image.getPlanes();
// Initialize the storage bitmaps once when the resolution is known.
if (mPreviewWdith != image.getWidth() || mPreviewHeight != image.getHeight()) {
mPreviewWdith = image.getWidth();
mPreviewHeight = image.getHeight();
//Log.d(TAG, String.format("Initializing at size %dx%d", mPreviewWdith, mPreviewHeight));
mRGBBytes = new int[mPreviewWdith * mPreviewHeight];
mRGBframeBitmap = Bitmap.createBitmap(mPreviewWdith, mPreviewHeight, Config.ARGB_8888);
mCroppedBitmap = Bitmap.createBitmap(INPUT_SIZE, INPUT_SIZE, Config.ARGB_8888);
mYUVBytes = new byte[planes.length][];
for (int i = 0; i < planes.length; ++i) {
mYUVBytes[i] = new byte[planes[i].getBuffer().capacity()];
}
}
for (int i = 0; i < planes.length; ++i) {
planes[i].getBuffer().get(mYUVBytes[i]);
}
final int yRowStride = planes[0].getRowStride();
final int uvRowStride = planes[1].getRowStride();
final int uvPixelStride = planes[1].getPixelStride();
ImageUtils.convertYUV420ToARGB8888(
mYUVBytes[0],
mYUVBytes[1],
mYUVBytes[2],
mRGBBytes,
mPreviewWdith,
mPreviewHeight,
yRowStride,
uvRowStride,
uvPixelStride,
false);
image.close();
} catch (final Exception e) {
if (image != null) {
image.close();
}
//Log.e(TAG, "Exception!", e);
Trace.endSection();
return;
}
mRGBframeBitmap.setPixels(mRGBBytes, 0, mPreviewWdith, 0, 0, mPreviewWdith, mPreviewHeight);
drawResizedBitmap(mRGBframeBitmap, mCroppedBitmap);
mInversedBipmap = imageSideInversion(mCroppedBitmap);
mResizedBitmap = Bitmap.createScaledBitmap(mInversedBipmap, (int)(INPUT_SIZE/4.5), (int)(INPUT_SIZE/4.5), true);
mInferenceHandler.post(
new Runnable() {
@Override
public void run() {
if (!new File(Constants.getFaceShapeModelPath()).exists()) {
mTransparentTitleView.setText("Copying landmark model to " + Constants.getFaceShapeModelPath());
FileUtils.copyFileFromRawToOthers(mContext, R.raw.shape_predictor_68_face_landmarks, Constants.getFaceShapeModelPath());
}
if(mframeNum % 3 == 0){
long startTime = System.currentTimeMillis();
synchronized (OnGetImageListener.this) {
results = mFaceDet.detect(mResizedBitmap);
}
long endTime = System.currentTimeMillis();
mTransparentTitleView.setText("Time cost: " + String.valueOf((endTime - startTime) / 1000f) + " sec");
}
// Draw on bitmap
if (results.size() != 0) {
for (final VisionDetRet ret : results) {
float resizeRatio = 4.5f;
Canvas canvas = new Canvas(mInversedBipmap);
// Draw landmark
ArrayList<Point> landmarks = ret.getFaceLandmarks();
for (Point point : landmarks) {
int pointX = (int) (point.x * resizeRatio);
int pointY = (int) (point.y * resizeRatio);
canvas.drawCircle(pointX, pointY, 4, mFaceLandmardkPaint);
String str;
str = "("+(int)pointX +" "+(int)pointY+")";
canvas.drawText(str,pointX,pointY, mFaceLandmardkPaint);
}
}
}
mframeNum++;
mWindow.setRGBBitmap(mInversedBipmap);
mIsComputing = false;
}
});
Trace.endSection();
}