• Tidak ada hasil yang ditemukan

Huda, Arif Akbarul. 2013. 9 Aplikasi Android Buatan Sendiri. Yogyakarta: Andi.

Juhara, Zamrony P. 2016. Panduan Lengkap Pemograman Android. Yogyakarta:

Penerbit Andi.

Safaat, Nazaruddin. 2011. Android Pemograman Aplikasi Mobile Smartphone dan Tablet PC, Bandung: Informatika.

Sofyana, Iwan. 2006. Mudah Menguasai Jbuilder Enterprise. Bandung: Informatika.

Widiarta, Wisnu. 2007. Dari Paskal ke Java. Bandung: Informatika.

Hariyanto, Bambang, Ir, Mt (2004), Rekayasa Sistem Berorientasi Obyek, Informatika Bandung, Bandung.

Rickyanto, Isak (2003), Dasar Pemrograman Berorientasi Objek dengan Java 2:

JDK 1.4, Andi Offset, Yogyakarta.

LAMPIRAN PROGRAM

splash_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android

"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView

android:id="@+id/imageView"

android:layout_width="wrap_content"

android:layout_height="36dp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

app:srcCompat="@drawable/logo_color" />

</android.support.constraint.ConstraintLayout>

ocr_capture.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android

"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/topLayout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:keepScreenOn="true">

<com.ocrtranslator.libs.ui.camera.CameraSourcePreview android:id="@+id/preview"

android:layout_width="match_parent"

android:layout_height="match_parent">

<com.ocrtranslator.libs.ui.camera.GraphicOverlay android:id="@+id/graphicOverlay"

android:layout_width="match_parent"

android:layout_height="match_parent" />

</com.ocrtranslator.libs.ui.camera.CameraSourcePreview>

<android.support.v7.widget.Toolbar android:id="@+id/toolbar2"

android:layout_width="match_parent"

android:layout_height="56dp"

android:layout_margin="0dp"

android:background="@color/darkBackground"

android:minHeight="?attr/actionBarSize"

android:theme="?attr/actionBarTheme"

app:contentInsetEnd="0dp"

app:contentInsetEndWithActions="0dp"

app:contentInsetLeft="0dp"

app:contentInsetRight="0dp"

app:contentInsetStart="0dp"

app:contentInsetStartWithNavigation="0dp">

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"

android:layout_height="0dp"

</android.support.constraint.ConstraintLayout>

</android.support.v7.widget.Toolbar>

<ImageView

android:id="@+id/imageView2"

android:layout_width="200dp"

android:layout_height="200dp"

android:tint="@color/colorPrimaryDark"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintHorizontal_bias="0.497"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

app:srcCompat="@drawable/ic_scan" />

<TextView

android:id="@+id/textView11"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:background="@color/darkBackground"

android:gravity="center"

android:paddingTop="8dp"

android:paddingBottom="8dp"

android:text="Scan text here"

android:textColor="@color/custom1"

android:textSize="16sp"

android:textStyle="italic"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"

android:layout_height="64dp"

android:background="@color/colorPrimary"

android:paddingStart="24dp"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

</android.support.constraint.ConstraintLayout>

<ScrollView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="16dp">

<LinearLayout

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

style="@style/titleDialog"

android:gravity="start"

android:padding="5dp"

/>

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:paddingBottom="36dp">

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"

android:layout_height="64dp"

android:background="@color/colorPrimary"

android:paddingStart="24dp"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent" />

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

app:srcCompat="@drawable/ic_arrow" />

</android.support.constraint.ConstraintLayout>

<ImageView

android:id="@+id/imageView3"

android:layout_width="wrap_content"

android:layout_height="48dp"

android:layout_gravity="center"

android:layout_marginTop="36dp"

android:layout_marginBottom="10dp"

android:adjustViewBounds="true"

app:srcCompat="@drawable/logo_color" />

<TextView

android:id="@+id/textView4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:gravity="center"

android:text="Version 1.0 - October 2018" />

<TextView

android:id="@+id/textView5"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginTop="24dp"

android:layout_marginBottom="8dp"

android:gravity="center"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginBottom="24dp"

android:gravity="center"

android:text="152406109" />

<TextView

android:id="@+id/textView9"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginBottom="8dp"

android:gravity="center"

android:text="Universitas Sumatera Utara"

android:textStyle="bold" />

<TextView

android:id="@+id/textView6"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:gravity="center"

android:text="[email protected]" />

<TextView

android:id="@+id/textView8"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:gravity="center"

android:text="081343200695" />

</LinearLayout>

SplashActivity.java

package com.ocrtranslator.libs.ui;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.os.Handler;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.Window;

import android.view.WindowManager;

import android.widget.ImageView;

import com.ocrtranslator.OcrCaptureActivity;

import com.ocrtranslator.R;

import java.io.InputStream;

import java.util.Timer;

import java.util.TimerTask;

public class SplashActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.splash_layout);

new Handler().postDelayed(new Runnable() {

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

ImageView imageView;

public DownloadImageTask(ImageView imageView) { this.imageView = imageView;

package com.ocrtranslator;

android.hardware.Camera.Parameters.FLASH_MODE_TORCH;

import static

android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_

VIDEO;

public final class OcrCaptureActivity extends AppCompatActivity {

private static final String TAG =

"OcrCaptureActivity";

private static final int RC_HANDLE_GMS = 9001;

private static final int RC_HANDLE_CAMERA_PERM = 2;

public static final String AutoFocus = "AutoFocus";

public static final String UseFlash = "UseFlash";

public static final String TextBlockObject =

"String";

private CameraSource cameraSource;

private CameraSourcePreview preview;

private GraphicOverlay<OcrGraphic> graphicOverlay;

private ScaleGestureDetector scaleGestureDetector;

private GestureDetector gestureDetector;

@Override

public void onCreate(Bundle bundle) { super.onCreate(bundle);

setContentView(R.layout.ocr_capture);

preview = findViewById(R.id.preview);

graphicOverlay =

findViewById(R.id.graphicOverlay);

boolean autoFocus = true;

boolean useFlash = false;

int rc = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);

if (rc == PackageManager.PERMISSION_GRANTED) { createCameraSource(autoFocus, useFlash);

} else {

requestCameraPermission();

}

gestureDetector = new GestureDetector(this, new CaptureGestureListener());

scaleGestureDetector = new

about.setContentView(R.layout.about_layout);

btBackAbout.setOnClickListener(new View.OnClickListener() {

} }

@Override

public boolean onTouchEvent(MotionEvent e) {

boolean b = scaleGestureDetector.onTouchEvent(e);

boolean c = gestureDetector.onTouchEvent(e);

return b || c || super.onTouchEvent(e);

}

@SuppressLint("InlinedApi")

private void createCameraSource(boolean autoFocus, boolean useFlash) {

public void onRequestPermissionsResult(int requestCode,

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

return;

}

if (grantResults.length != 0 && grantResults[0]

> 0 ? grantResults[0] : "(empty)"));

DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {

builder.setTitle("Multitracker sample")

.setMessage(R.string.no_camera_permission)

.setPositiveButton(R.string.ok, listener) .show();

}

private void startCameraSource() throws SecurityException {

dlg.show();

Dialog translationDialog;

HashMap<String, String> map;

private String lang;

private void translationDialog(String inputText) {

translationDialog = new Dialog(this);

translationDialog.setContentView(R.layout.translate_layou t);

translationDialog.getWindow().setLayout(ViewGroup.LayoutP arams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

translationDialog.setCancelable(false);

translationDialog.show();

map = new HashMap<>();

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView<?>

adapterView, View view, int i, long l) { String item =

View.OnClickListener() {

private void showTranslation(String result) { EditText etResult =

translationDialog.findViewById(R.id.etResult);

etResult.setText(result);

}

private void translate(final String inputText, final

protected Map<String, String> getParams() {

private class CaptureGestureListener extends GestureDetector.SimpleOnGestureListener {

@Override

public boolean onSingleTapConfirmed(MotionEvent e) {

return onTap(e.getRawX(), e.getRawY()) ||

super.onSingleTapConfirmed(e);

} }

private class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener { @Override

public boolean onScale(ScaleGestureDetector detector) {

return false;

}

@Override

public boolean onScaleBegin(ScaleGestureDetector detector) {

return true;

}

@Override

public void onScaleEnd(ScaleGestureDetector detector) {

} }

OcrGraphic.java

package com.ocrtranslator.libs.ui;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.RectF;

import com.ocrtranslator.libs.ui.camera.GraphicOverlay;

import com.google.android.gms.vision.text.TextBlock;

public class OcrGraphic extends GraphicOverlay.Graphic { private int id;

private static final int TEXT_COLOR = Color.WHITE;

private static Paint rectPaint;

private static Paint textPaint;

private final TextBlock text;

OcrGraphic(GraphicOverlay overlay, TextBlock text) { super(overlay);

this.text = text;

if (rectPaint == null) { rectPaint = new Paint();

rectPaint.setColor(TEXT_COLOR);

rectPaint.setStyle(Paint.Style.STROKE);

rectPaint.setStrokeWidth(4.0f);

}

if (textPaint == null) { textPaint = new Paint();

textPaint.setColor(TEXT_COLOR);

textPaint.setTextSize(54.0f);

}

postInvalidate();

}

public int getId() { return id;

}

public void setId(int id) { this.id = id;

}

public TextBlock getTextBlock() { return text;

}

public boolean contains(float x, float y) {

TODO: Check if this graphic's text contains this point.

if (text == null) { return false;

}

RectF rect = new RectF(text.getBoundingBox());

rect = translateRect(rect);

return rect.contains(x, y);

}

@Override

public void draw(Canvas canvas) {

TODO: Draw the text onto the canvas.

if (text == null) { return;

}

RectF rect = new RectF(text.getBoundingBox());

rect = translateRect(rect);

canvas.drawRect(rect, rectPaint);

} }

OcrDetectorProcessor.java

package com.ocrtranslator.libs.ui;

import android.util.Log;

import android.util.SparseArray;

import com.google.android.gms.vision.Detector;

import com.google.android.gms.vision.text.TextBlock;

import com.ocrtranslator.libs.ui.camera.GraphicOverlay;

TODO: Make this implement Detector.Processor<TextBlock>

and add text to the GraphicOverlay

public class OcrDetectorProcessor implements Detector.Processor<TextBlock> {

private GraphicOverlay<OcrGraphic> graphicOverlay;

public

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.view.View;

import com.google.android.gms.vision.CameraSource;

import java.util.HashSet;

import java.util.Set;

public class GraphicOverlay<T extends GraphicOverlay.Graphic> extends View {

private final Object lock = new Object();

private int previewWidth;

private float widthScaleFactor = 1.0f;

private int previewHeight;

private float heightScaleFactor = 1.0f;

private int facing = CameraSource.CAMERA_FACING_BACK;

private Set<T> graphics = new HashSet<>();

public static abstract class Graphic { private GraphicOverlay mOverlay;

public Graphic(GraphicOverlay overlay) { mOverlay = overlay;

}

public abstract void draw(Canvas canvas);

public abstract boolean contains(float x, float y);

public float scaleX(float horizontal) { return horizontal *

mOverlay.widthScaleFactor;

}

public float scaleY(float vertical) {

return vertical * mOverlay.heightScaleFactor;

}

public float translateX(float x) { if (mOverlay.facing ==

CameraSource.CAMERA_FACING_FRONT) {

return mOverlay.getWidth() - scaleX(x);

} else {

return scaleX(x);

}

public GraphicOverlay(Context context, AttributeSet attrs) {

}

public T getGraphicAtLocation(float rawX, float rawY) {

synchronized (lock) {

// Get the position of this View so the raw location can be offset relative to the view.

int[] location = new int[2];

public void setCameraInfo(int previewWidth, int previewHeight, int facing) {

protected void onDraw(Canvas canvas) { super.onDraw(canvas);

CameraSourcePreview.java

package com.ocrtranslator.libs.ui.camera;

import android.Manifest;

import android.content.Context;

import android.content.res.Configuration;

import android.support.annotation.RequiresPermission;

import android.util.AttributeSet;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.ViewGroup;

import com.google.android.gms.common.images.Size;

import java.io.IOException;

public class CameraSourcePreview extends ViewGroup { private static final String TAG =

"CameraSourcePreview";

private Context context;

private SurfaceView surfaceView;

private boolean startRequested;

private boolean surfaceAvailable;

private CameraSource cameraSource;

private GraphicOverlay overlay;

public CameraSourcePreview(Context context, AttributeSet attrs) {

super(context, attrs);

this.context = context;

startRequested = false;

surfaceAvailable = false;

surfaceView = new SurfaceView(context);

surfaceView.getHolder().addCallback(new SurfaceCallback());

addView(surfaceView);

}

@RequiresPermission(Manifest.permission.CAMERA) public void start(CameraSource cameraSource) throws IOException, SecurityException {

if (cameraSource == null) { stop();

}

this.cameraSource = cameraSource;

@RequiresPermission(Manifest.permission.CAMERA) public void start(CameraSource cameraSource, GraphicOverlay overlay) throws IOException,

@RequiresPermission(Manifest.permission.CAMERA) private void startIfReady() throws IOException, SecurityException {

}

private class SurfaceCallback implements SurfaceHolder.Callback {

@Override

public void surfaceCreated(SurfaceHolder surface) {

public void surfaceDestroyed(SurfaceHolder surface) {

surfaceAvailable = false;

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

} }

@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

if (isPortraitMode()) {

private boolean isPortraitMode() { int orientation =

context.getResources().getConfiguration().orientation;

if (orientation ==

Configuration.ORIENTATION_LANDSCAPE) { return false;

}

if (orientation ==

Configuration.ORIENTATION_PORTRAIT) { return true;

}

Log.d(TAG, "isPortraitMode returning false by default");

return false;

} }

CameraSource.java

package com.ocrtranslator.libs.ui.camera;

@SuppressWarnings("deprecation") public class CameraSource {

@SuppressLint("InlinedApi")

public static final int CAMERA_FACING_BACK = CameraInfo.CAMERA_FACING_BACK;

@SuppressLint("InlinedApi")

public static final int CAMERA_FACING_FRONT = CameraInfo.CAMERA_FACING_FRONT;

private static final String TAG = "OpenCameraSource";

private static final int DUMMY_TEXTURE_NAME = 100;

private static final float ASPECT_RATIO_TOLERANCE = 0.01f;

@StringDef({

Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE,

Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO, Camera.Parameters.FOCUS_MODE_AUTO,

Camera.Parameters.FOCUS_MODE_EDOF, Camera.Parameters.FOCUS_MODE_FIXED, Camera.Parameters.FOCUS_MODE_INFINITY, Camera.Parameters.FOCUS_MODE_MACRO })

@Retention(RetentionPolicy.SOURCE) private @interface FocusMode {}

@StringDef({

Camera.Parameters.FLASH_MODE_ON, Camera.Parameters.FLASH_MODE_OFF, Camera.Parameters.FLASH_MODE_AUTO, Camera.Parameters.FLASH_MODE_RED_EYE, Camera.Parameters.FLASH_MODE_TORCH })

@Retention(RetentionPolicy.SOURCE) private @interface FlashMode {}

private Context context;

private final Object cameraLock = new Object();

private Camera camera;

private int mFacing = CAMERA_FACING_BACK;

private int rotation;

private Size previewSize;

private float requestedFps = 30.0f;

private int requestedPreviewWidth = 1024;

private int requestedPreviewHeight = 768;

private String focusMode = null;

private String flashMode = null;

private SurfaceView dummySurfaceView;

private SurfaceTexture dummySurfaceTexture;

private Thread processingThread;

private FrameProcessingRunnable frameProcessor;

private Map<byte[], ByteBuffer> bytesToByteBuffer = new HashMap<>();

public static class Builder {

private final Detector<?> detector;

private CameraSource cameraSource = new CameraSource();

public Builder(Context context, Detector<?>

detector) {

IllegalArgumentException("Invalid fps: " + fps);

}

cameraSource.requestedFps = fps;

return this;

}

public Builder setFocusMode(@FocusMode String mode) {

cameraSource.focusMode = mode;

return this;

}

public Builder setFlashMode(@FlashMode String mode) {

cameraSource.flashMode = mode;

return this;

}

public Builder

setRequestedPreviewSize(int width, int height) { final int MAX = 1000000;

if ((width <= 0) || (width > MAX) || (height

<= 0) || (height > MAX)) { throw new

IllegalArgumentException("Invalid preview size: " + width + "x" + height);

}

cameraSource.requestedPreviewWidth = width;

IllegalArgumentException("Invalid camera: " + facing);

}

public interface ShutterCallback { void onShutter();

}

public interface PictureCallback { void onPictureTaken(byte[] data);

}

public interface AutoFocusCallback { void onAutoFocus(boolean success);

}

public interface AutoFocusMoveCallback { void onAutoFocusMoving(boolean start);

@RequiresPermission(Manifest.permission.CAMERA) public CameraSource start() throws IOException { synchronized (cameraLock) {

if (camera != null) {

return this;

@RequiresPermission(Manifest.permission.CAMERA) public CameraSource start(SurfaceHolder

surfaceHolder) throws IOException {

frameProcessor.setActive(false);

return 0;

public void takePicture(ShutterCallback shutter, PictureCallback jpeg) {

@Nullable @FocusMode

public String getFocusMode() { return focusMode;

}

public boolean setFocusMode(@FocusMode String mode) { synchronized (cameraLock) {

public boolean setFlashMode(@FlashMode String mode) { synchronized (cameraLock) {

public void autoFocus(@Nullable AutoFocusCallback cb)

{

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

public boolean setAutoFocusMoveCallback(@Nullable AutoFocusMoveCallback cb) {

}

private class PictureStartCallback implements Camera.ShutterCallback {

private class PictureDoneCallback implements Camera.PictureCallback {

private class CameraAutoFocusCallback implements Camera.AutoFocusCallback {

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

private class CameraAutoFocusMoveCallback implements Camera.AutoFocusMoveCallback {

private AutoFocusMoveCallback mDelegate;

@Override

public void onAutoFocusMoving(boolean start, Camera camera) {

@SuppressLint("InlinedApi") private Camera createCamera() {

Camera camera = Camera.open(requestedCameraId);

SizePair sizePair = selectSizePair(camera, suitable preview frames per second range.");

}

parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());

parameters.setPreviewFpsRange(

previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],

previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX])

;

parameters.setPreviewFormat(ImageFormat.NV21);

setRotation(camera, parameters,

camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());

camera.addCallbackBuffer(createPreviewBuffer(previewSize) );

camera.addCallbackBuffer(createPreviewBuffer(previewSize)

private static int getIdForRequestedCamera(int facing) {

private static SizePair selectSizePair(Camera camera, int desiredWidth, int desiredHeight) {

List<SizePair> validPreviewSizes =

private Size mPicture;

public SizePair(android.hardware.Camera.Size previewSize,

private static List<SizePair>

generateValidPreviewSizeList(Camera camera) { Camera.Parameters parameters =

camera.getParameters();

List<android.hardware.Camera.Size>

supportedPreviewSizes =

parameters.getSupportedPreviewSizes();

List<android.hardware.Camera.Size>

supportedPictureSizes =

parameters.getSupportedPictureSizes();

List<SizePair> validPreviewSizes = new ArrayList<>();

for (android.hardware.Camera.Size previewSize : supportedPreviewSizes) {

break; that we shouldn't set a picture size.

validPreviewSizes.add(new

private int[] selectPreviewFpsRange(Camera camera, float desiredPreviewFps) {

private void setRotation(Camera camera, Camera.Parameters parameters, int cameraId) { WindowManager windowManager =

(WindowManager)

context.getSystemService(Context.WINDOW_SERVICE);

Camera.getCameraInfo(cameraId, cameraInfo);

int angle;

camera.setDisplayOrientation(displayAngle);

parameters.setRotation(angle);

}

private byte[] createPreviewBuffer(Size previewSize) { int bitsPerPixel =

ImageFormat.getBitsPerPixel(ImageFormat.NV21);

ByteBuffer buffer = ByteBuffer.wrap(byteArray);

if (!buffer.hasArray() || (buffer.array() !=

byteArray)) {

throw new IllegalStateException("Failed to create valid buffer for camera source.");

}

bytesToByteBuffer.put(byteArray, buffer);

return byteArray;

}

private class CameraPreviewCallback implements Camera.PreviewCallback {

private class FrameProcessingRunnable implements Runnable {

private Detector<?> mDetector;

private long mStartTimeMillis = SystemClock.elapsedRealtime();

private final Object mLock = new Object();

private boolean mActive = true;

private long mPendingTimeMillis;

private int mPendingFrameId = 0;

private ByteBuffer mPendingFrameData;

FrameProcessingRunnable(Detector<?> detector) { mDetector = detector;

mDetector = null; find ByteBuffer associated with the image " +

"data from the

mLock.wait();

} catch (InterruptedException e) {

Log.d(TAG, "Frame processing loop terminated.", e);

return;

} }

if (!mActive) {

return;

}

outputFrame = new Frame.Builder() .setImageData(mPendingFrameData, previewSize.getWidth(),

previewSize.getHeight(), ImageFormat.NV21)

.setId(mPendingFrameId)

.setTimestampMillis(mPendingTimeMillis)

.setRotation(rotation) .build();

data = mPendingFrameData;

mPendingFrameData = null;

}

try {

mDetector.receiveFrame(outputFrame);

} catch (Throwable t) {

Log.e(TAG, "Exception thrown from receiver.", t);

} finally {

camera.addCallbackBuffer(data.array());

} } } } }

Medan, 22 Oktober 2018

Kepada Yth :

Ibu ketua program studi D3 TI USU di

Medan

Dengan hormat,

Saya yang bertanda tangan dibawah ini : Nama : Sari Mawar

Nim : 152406109

Program Studi : D3 Teknik Informatika

Memohon izin melaksanakan Sidang Meja Hijau dengan judul Tugas Akhir Aplikasi Penerjemah Dengan Metode Text Recognizer.

Demikian permohonan ini saya ajukan, atas perhatiannya saya ucapkan terima kasih.

Diketahui

Ketua Program Studi Pemohon,

Dra. Normalina Napitupulu, M.Sc Sari Mawar

NIP. 196311061989022001 NIM. 152406109

Dokumen terkait