Skip to content

Commit c6f5b90

Browse files
authored
Merge pull request #60 from r1walz/patch1
Save better quality PNGs using output stream
2 parents 4b41421 + b2d72e3 commit c6f5b90

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

app/src/main/java/com/sdsmdg/kd/trianglifyexample/MainActivity.java

+32-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import android.content.Intent;
88
import android.content.pm.PackageManager;
99
import android.graphics.Bitmap;
10+
import android.net.Uri;
1011
import android.os.Bundle;
12+
import android.os.Environment;
1113
import android.provider.MediaStore;
1214
import android.support.annotation.NonNull;
1315
import android.support.v4.app.ActivityCompat;
@@ -26,7 +28,14 @@
2628
import com.sdsmdg.kd.trianglify.models.Palette;
2729
import com.sdsmdg.kd.trianglify.views.TrianglifyView;
2830

31+
import java.io.File;
32+
import java.io.FileNotFoundException;
33+
import java.io.FileOutputStream;
2934
import java.io.IOException;
35+
import java.io.OutputStream;
36+
import java.text.SimpleDateFormat;
37+
import java.util.Date;
38+
import java.util.Locale;
3039
import java.util.Random;
3140

3241
public class MainActivity extends AppCompatActivity {
@@ -225,7 +234,12 @@ public int pxToDp(int px) {
225234
public boolean onOptionsItemSelected(MenuItem item) {
226235
switch (item.getItemId()) {
227236
case R.id.action_save:
228-
exportImage();
237+
try {
238+
exportImage();
239+
} catch (IOException e) {
240+
Toast.makeText(MainActivity.this,
241+
"Storage access failed!",Toast.LENGTH_LONG).show();
242+
}
229243
break;
230244
case R.id.action_about:
231245
Intent aboutActivityIntent = new Intent(this, AboutActivity.class);
@@ -268,7 +282,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
268282
}
269283
}
270284

271-
private void exportImage() {
285+
private void exportImage() throws IOException {
272286
// Checks if permission is required for android version > 6
273287
boolean permissionStatus = ContextCompat.checkSelfPermission(this,
274288
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED;
@@ -279,18 +293,22 @@ private void exportImage() {
279293
PERMISSION_CODE);
280294
} else {
281295
Bitmap bitmap = trianglifyView.getBitmap();
282-
if (bitmap != null) {
296+
if (bitmap != null)
283297
addImageToGallery(bitmap, this);
284-
Toast.makeText(this, "Saved!", Toast.LENGTH_SHORT).show();
285-
} else {
298+
else
286299
Toast.makeText(this, "Unable to generate image, please try again",
287300
Toast.LENGTH_LONG).show();
288-
}
301+
289302
}
290303
}
291304

292-
public static void addImageToGallery(Bitmap bitmap, Context context) {
293-
MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "", "");
305+
public static void addImageToGallery(Bitmap bitmap, Context context) throws IOException {
306+
String timeStamp = "IMG_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date()) + ".png";
307+
OutputStream os = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + timeStamp);
308+
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
309+
os.flush();
310+
os.close();
311+
Toast.makeText(context, "Saved!", Toast.LENGTH_SHORT).show();
294312
}
295313

296314
// Sets bitmap from trianglify view as wallpaper of device
@@ -328,7 +346,12 @@ public void onRequestPermissionsResult(int requestCode,
328346
case PERMISSION_CODE:
329347
if (grantResults.length > 0
330348
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
331-
exportImage();
349+
try {
350+
exportImage();
351+
} catch (IOException e) {
352+
Toast.makeText(MainActivity.this,
353+
"Storage access failed!",Toast.LENGTH_LONG).show();
354+
}
332355
} else {
333356
Toast.makeText(this, "Storage access failed, check permission",
334357
Toast.LENGTH_LONG).show();

0 commit comments

Comments
 (0)