Autore Topic: Visuallizzare linea rossa mentre si scatta una foto  (Letto 690 volte)

Offline Giusy

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    ACER liquid Mini
  • Sistema operativo:
    Mac OS X 10.5
Visuallizzare linea rossa mentre si scatta una foto
« il: 22 Marzo 2012, 19:55:08 CET »
0
Salve, sto realizzando un'applicazione Android simile a quella del barcode ma applicabile a immagini che non contengono codici a barre. Ho già scritto il codice per accedere alla web cam e quindi scattare la fotografia ma non riesco a trovare un modo per poter visualizzare la linea rossa. Qualcuno di voi sa aiutarmi?Vi ringrazio!!!!

Offline Giovanni D'Addabbo

  • Utente normale
  • ***
  • Post: 163
  • Respect: +8
    • Google+
    • giovannid
    • giovanni.daddabbo
    • magoscuro
    • Mostra profilo
    • Rhubbit.it - Sviluppo app Android/iOs
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Rhubbit srl
  • Sistema operativo:
    Windows/Mac/Linux
Re:Visuallizzare linea rossa mentre si scatta una foto
« Risposta #1 il: 23 Marzo 2012, 08:56:31 CET »
0
se non ricordo male utilizzavo una surface view sovrapposto alla view della camera sul quale disegnavo linee cerchi o quello che volevo :)
inizia a dare un occhio partendo da li

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Visuallizzare linea rossa mentre si scatta una foto
« Risposta #2 il: 23 Marzo 2012, 09:16:09 CET »
0
Ciao io in una mia app ho fatto in questo modo.

Il layout dell'activity per la cattura dell'immagine deve essere una cosa del genere:

Codice (Java): [Seleziona]
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent">

        <SurfaceView android:id="@+id/preview_view"
                android:layout_width="fill_parent" android:layout_height="fill_parent"
                android:layout_centerInParent="true" />

        <mio.packagename.ViewfinderView
                android:id="@+id/viewfinder_view" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:background="@color/transparent" />
               
        ....

</FrameLayout>

Ora dovresti definire la classe ViewfinderView e sovrasciverne il metodo onDraw, tipo:

Codice (Java): [Seleziona]
public final class ViewfinderView extends View {

        private static final int[] SCANNER_ALPHA = { 0, 64, 128, 192, 255, 192, 128, 64 };
        private static final long ANIMATION_DELAY = 100L;

        private final Paint paint;
        private final int maskColor;
        private final int frameColor;
        private final int laserColor;
        private int scannerAlpha;

        public ViewfinderView(Context context, AttributeSet attrs) {
                super(context, attrs);

                // Initialize these once for performance rather than calling them every
                // time in onDraw().
                paint = new Paint();
                Resources resources = getResources();
                maskColor = resources.getColor(R.color.viewfinder_mask);
                frameColor = resources.getColor(R.color.viewfinder_frame);
                laserColor = resources.getColor(R.color.viewfinder_laser);
                scannerAlpha = 0;
        }

        @Override
        public void onDraw(Canvas canvas) {
                // Ritorna il rettangolo dove centrare l'immagine da catturare
                Rect frame = CameraManager.get().getFramingRect();
                if (frame == null) {
                        return;
                }
                int width = canvas.getWidth();
                int height = canvas.getHeight();

                // Draw the exterior (i.e. outside the framing rect) darkened
                paint.setColor(maskColor);
                canvas.drawRect(0, 0, width, frame.top, paint);
                canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
                canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);
                canvas.drawRect(0, frame.bottom + 1, width, height, paint);

                // Draw a two pixel solid black border inside the framing rect
                paint.setColor(frameColor);
                canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
                canvas.drawRect(frame.left, frame.top + 2, frame.left + 2, frame.bottom - 1, paint);
                canvas.drawRect(frame.right - 1, frame.top, frame.right + 1, frame.bottom - 1, paint);
                canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);

                // Draw a red "laser scanner" line through the middle to show
                // decoding is active
                paint.setColor(laserColor);
                paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);
                scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
                int middle = frame.height() / 2 + frame.top;
                canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1, middle + 2, paint);

                // Request another update at the animation interval, but only
                // repaint the laser line,
                // not the entire viewfinder mask.
                postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top, frame.right, frame.bottom);

        }

        public void drawViewfinder() {
                invalidate();
        }

}

Così ottieni l'effetto simile all'activity dell'app BarcodeScanner.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial