JavascriptProva

lunedì 27 febbraio 2017

Posso operare la mia scelta fino al numero di record contenuti nel database.
Se il database aumenta numero, aumenta il numero massimo.
Se il database diminuisce il numero di immagini, diminuisce il numero massimo.
Come si fa a modificare un numberpicker da programma?
C'è modo, usando setValue.
Dunque, noi salviamo il numero di immagini che vogliamo in SharedPreferences.
Quindi se aumenta il numero di immagini nel database non salviamo niente ma modifichiamo il valore massimo al numero delle immagini del database.
Se invece diminuisce il numero di immagini nel database e diventa minore del numero salvato, allora bisogna ridurre il numero salvato.
L'unico numero che devo salvare è il numero di immagini volute.
Nell'activity Settings devo modificare il NumberPicker con un limite massimo nel valore dato dal numero di records nel database, e qui salvare il numero di immagini volute.

mercoledì 22 febbraio 2017

Estrazione a sorte di diverse ImageView mediante un ArrayList

Ho risolto il problema delle tre immagini.
Ecco il codice:
public class MainActivity extends AppCompatActivity {

    ImageView image1,image2,image3;
    View.OnTouchListener onTouchListener;


    ArrayList lista=new ArrayList();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image1=(ImageView)findViewById(R.id.imageView);
        image2=(ImageView)findViewById(R.id.imageView2);
        image3=(ImageView)findViewById(R.id.imageView3);
        image1.setImageResource(R.drawable.android);
        image1.setTag("omino");

        image2.setImageResource(R.drawable.cattivik);
        image2.setTag("cattivik");

        image3.setImageResource(R.drawable.facciadicazzo);
        image3.setTag("pupuccio");

        lista.add(image1);
        lista.add(image2);
        lista.add(image3);

        Random random=new Random();
        int numero=random.nextInt(3);
        final ImageView estratta=lista.get(numero);
        System.out.println(estratta.getTag());

       onTouchListener =new View.OnTouchListener() {

           @Override
           public boolean onTouch(View v, MotionEvent event) {
               if(v==estratta){
                   System.out.println("ESATTA");
               }
               else{
                   System.out.println("FALSA");
               }
               return false;
           }
       };
        image3.setOnTouchListener(onTouchListener);
        image1.setOnTouchListener(onTouchListener);
        image2.setOnTouchListener(onTouchListener);


    }
}
Parto da tre ImageView che caricano immagini prese, in questo caso, dalle risorse (ma che nel programma definitivo andranno prese dal database), e le inserisco in un ArrayList di ImageViews.
La didascalia è compresa nel loro Tag.
Estraggo a sorte l'indice della ArrayList, e identifico con la variabile "estratta" di tipo ImageView la ImageView corrispondente all'indice estratto a sorte.
Quindi accomuno il listener onTouchListener alle tre ImageView, e se la sorgente dell'evento è quella estratta ottengo un comportamento, mentre se non lo è ottengo un altro comportamento.

sabato 18 febbraio 2017

Esercizio sulle conversioni di indirizzi in immagini come bitmap, array di bytes e stringhe

Ripasso tutte le conversioni di immagini.
  • Uri a Path
  • da Path a Bitmap
  • da Bitmap a byte array (salvabile come blob)
  • da Bitmap a byte array e quindi a stringa (salvabile come stringa e con possibilità di interazione con il database online.

Da Uri a Path:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            System.out.println(UriToPath(data.getData()));


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }
02-18 23:15:29.203 4670-4670/? I/System.out: /storage/sdcard/DCIM/facciadaculo.jpeg


Da Path a Bitmap:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            imageView.setImageBitmap(b);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }
}
E funziona anche questa.
Da Bitmap a byte array:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            byte[] bt=BitmapToByteArray(b);
            System.out.println(bt);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }

    private byte[] BitmapToByteArray(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        return b;
    }


}
02-18 23:25:30.707 4855-4855/? I/System.out: [B@1a6afe00

(questa non la capisco... forse si tratta perlopiù di numeri non traducibili in caratteri)
Da bitmap a stringa:
public class MainActivity extends AppCompatActivity {

    Button button;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setData(Uri.parse("content://media/external/images/media"));
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(resultCode==RESULT_OK){
            String s=UriToPath(data.getData());
            Bitmap b=PathToBitmap(s,300);
            String stringa=BitmapToString(b);
            System.out.println(stringa);


        }
    }

    private String UriToPath(Uri uri){
        Cursor crs=getContentResolver().query(uri,null,null,null,null);
        crs.moveToFirst();
        int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String s =crs.getString(indice);
        return s;
    }

    private Bitmap PathToBitmap(String path, int dimensioni){
        BitmapFactory.Options opzioni=new BitmapFactory.Options();
        opzioni.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(path);
        int fattore=1;
        while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){
            fattore*=2;
        }
        opzioni.inSampleSize=fattore;
        opzioni.inJustDecodeBounds=false;
        Bitmap bmp=BitmapFactory.decodeFile(path,opzioni);
        return bmp;
    }

    private byte[] BitmapToByteArray(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        return b;
    }
    private String BitmapToString(Bitmap bmp){
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,80,stream);
        byte[] b=stream.toByteArray();
        String s= Base64.encodeToString(b,Base64.DEFAULT);
        return s;
    }


}
02-18 23:30:24.629 4970-4970/? I/System.out: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
02-18 23:30:24.629 4970-4970/? I/System.out: FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
02-18 23:30:24.629 4970-4970/? I/System.out: KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAFAAUADASIA
02-18 23:30:24.629 4970-4970/? I/System.out: AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
02-18 23:30:24.629 4970-4970/? I/System.out: AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3

.....

...che sarebbe una minima parte della stringa che rappresenterebbe la mia faccia.

mercoledì 8 febbraio 2017

Conversione di immagine bitmap in stringa.

Salviamo immagini in un database.
Ho appreso, e usato, il modo di salvare un'immagine sotto forma di stringa.
Vado a ripassarlo.
L'ho trovato

Ci provo. Converto l'immagine "bonazza" che ho già usato per porla in una ImageView.
public class MainActivity extends AppCompatActivity {

    TextView textView;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.textView);
        Bitmap bmp;
        bmp= BitmapFactory.decodeResource(getResources(),R.drawable.bonazza);


        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG,100,stream);
        byte[] b=stream.toByteArray();
        String s= Base64.encodeToString(b,Base64.DEFAULT);
        System.out.println(s);

    }
}
Ed ecco:
02-08 18:27:58.807 4224-4224/? I/System.out: 5nX684z+PBzknqy/EZ3WdpYiPRWtDXVP+bs4rfZvW92cvtJa6vpbytvstb2Vu3m1r+Y2tfAu4hea
02-08 18:27:58.807 4224-4224/? I/System.out: eKGZYz/qikjgZy4bIVh0wvB6Eng7iTw8vw18VaW6PZXF4uHXCFyV4Ldix4PTr688nH6Z6n4fjj86
02-08 18:27:58.807 4224-4224/? I/System.out: 2LqyxkFeDjJMueoz1TPXuevNclN4atS8ZYRttkTOVJzy3qvHB/l1wc9086qYPETweKjGpWpqHPJp
02-08 18:27:58.807 4224-4224/? I/System.out: te+lNNWb2i4pavbo1d3GvVjflnaK6a23stnr53vp2Pz1mtfifog8zyFe3wDud3ViBu5wpAzgAn0z
02-08 18:27:58.807 4224-4224/? I/System.out: 3JotfHXimxdm1K0ugmxX3QhmUqCw3cnp3+pPOOv6BTeALXUwTJMojwQIypIwGYf3eOo6eg6daxJv
02-08 18:27:58.807 4224-4224/? I/System.out: hJpAnu4pVtpIv7N3xoYeV4kI5KdvqeO+ea76WOy7EwcsVQ5oLlaspfE21e1m1p083re7c1MbVoJP
02-08 18:27:58.807 4224-4224/? I/System.out: nbUmo6X7J317JJr5a3WvyPpPxdsHjhllluFbLIyyxdCpx2/U5P1Jro9P+KGjyyXDy3qpgEoGwAck
02-08 18:27:58.807 4224-4224/? I/System.out: gE55A6nuenUDiXT/AIW6KYNQMyxuHvHjh2pgx4aUH+EdRg9zwoyAM1zfiH4GaWLZruC+eIEFigaU
02-08 18:27:58.807 4224-4224/? I/System.out: Z5JA4Xpz0z685Oa2h/YVV+zp4dqdRqEXadlOT5U9Y9G427d3Z37MLmlZLnT5lFR3T15Wm9br+b08
02-08 18:27:58.807 4224-4224/? I/System.out: 3ZN9VJ42t7lTJFdRyxEcGNlZv4sHBPBPfr2yM4Nc5d+JrTLOjM5Y7iGIDdWxnDDqOvp6nO4+S3/w
...un frammento della stringa in cui è stata ridotta l'immagine.

Ripasso su come inserire un'immagine in un controllo ImageView

Come caricare immagini in una ImageView?
Mettiamo alcune immagini nelle cartelle delle risorse e ripassiamo.

Ecco, non mi ricordo come si caricano immagini dalle risorse.
public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        imageView.setImageResource(R.drawable.bonazza);
    }
}
Da risorse me lo sono ricordato.
Da bitmap non saprei...

Ecco:
public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=(ImageView)findViewById(R.id.imageView);
        imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.bonazza));
    }
}
Anche questa è ripassata.