2016-09-12 3 views
1

Ich mache eine Android-Anwendung, die Bilder über soziale Medien teilt. Die Bilder befinden sich in einem Rasterlayout. Wenn also ein Benutzer ein Bild drückt, öffnet sich eine andere Aktivität, die dieses spezifische Bild anzeigt (welches nun geteilt werden kann). Die Bilder werden im Ordner für den Ordner gespeichert. Ich möchte, dass das Bild, das ich teile, anders ist (kleiner - 32px) als der, den der Benutzer in seiner separaten Aktivität betrachtet, die größer ist (172px). HierZeigen Sie ein großes Bild, aber teilen Sie ein kleineres Bild in Android

ist die Aktivität, in dem Sie das ganze Bild sieht in:

public class FullImage extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.full_image); 

     Intent i = getIntent(); 

     int position = i.getExtras().getInt("id"); 
     ImageAdapter imageAdapter = new ImageAdapter(this); 

     ImageView imageView = (ImageView) findViewById(R.id.full_image_view); 
     imageView.setImageResource(imageAdapter.mThumbIds[position]); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     OutputStream output; 

     ImageView image = (ImageView) findViewById(R.id.full_image_view); 
     Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap(); 

     File dir = new File(Environment.getExternalStorageDirectory() + "/images"); 

     dir.mkdirs(); 

     File file = new File(dir, "images.png"); 

     try { 
      verifyStoragePermissions(this); 
      output = new FileOutputStream(file); 

      bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
      output.flush(); 
      output.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     switch (item.getItemId()) { 
      case R.id.action_share: 
       Uri uri = Uri.fromFile(file); 
       Intent shareIntent = new Intent(); 
       shareIntent.setAction(Intent.ACTION_SEND); 
       shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
       shareIntent.setType("image/png"); 
       startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.action_share))); 

      case android.R.id.home: 
       onBackPressed(); 
       return true; 
     } 
     return true; 

    } 

    // Storage Permissions 
    private static final int REQUEST_EXTERNAL_STORAGE = 1; 
    private static String[] PERMISSIONS_STORAGE = { 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 

    public static void verifyStoragePermissions(Activity activity) { 
     // Check if we have write permission 
     int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

     if (permission != PackageManager.PERMISSION_GRANTED) { 
      // We don't have permission so prompt the user 
      ActivityCompat.requestPermissions(
        activity, 
        PERMISSIONS_STORAGE, 
        REQUEST_EXTERNAL_STORAGE 
      ); 
     } 
    } 
} 
+2

Verwenden Bitmap.createScaledBitmap eine unterschiedlich große Bitmap aus dem Original zu erzeugen: https://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap(android.graphics.Bitmap, int , int, boolean) –

+0

Sie können ein Vorschaubild aus dem Hauptbild extrahieren, die kleiner und niedriger in der Auflösung –

Antwort

1

Sie die Bitmap vor Speichern skalieren können, oder speichern Sie ein zweites verkleinerte Bild.

int PIXELS = 32; 
... 
bitmap = bitmap.createScaledBitmap(bitmap, PIXELS , PIXELS , true)); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
+0

sein wird Dank @adalPaRi .... arbeitete wie ein Charme –

Verwandte Themen