- 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.
Nessun commento:
Posta un commento