java.lang.OutOfMemoryError: bitmap size exceeds VM budget – Android

One of the most common errors that I found developing Android Apps is the “java.lang.OutOfMemoryError: Bitmap Size Exceeds VM Budget” error. I found this error frequently on activities using lots of bitmaps after changing orientation: the Activity is destroyed, created again and the layouts are “inflated” from the XML consuming the VM memory available for … Read more

Android Crop Center of Bitmap

This can be achieved with: Bitmap.createBitmap(source, x, y, width, height) if (srcBmp.getWidth() >= srcBmp.getHeight()){ dstBmp = Bitmap.createBitmap( srcBmp, srcBmp.getWidth()/2 – srcBmp.getHeight()/2, 0, srcBmp.getHeight(), srcBmp.getHeight() ); }else{ dstBmp = Bitmap.createBitmap( srcBmp, 0, srcBmp.getHeight()/2 – srcBmp.getWidth()/2, srcBmp.getWidth(), srcBmp.getWidth() ); }

Android Bitmap to Base64 String

use following method to convert bitmap to byte array: ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream .toByteArray(); to encode base64 from byte array use following method String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

Getting Bitmap from vector drawable

Checked on API: 17, 21, 23 public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) { Drawable drawable = ContextCompat.getDrawable(context, drawableId); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { drawable = (DrawableCompat.wrap(drawable)).mutate(); } Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } UPDATE: Project gradle: dependencies { classpath ‘com.android.tools.build:gradle:2.2.0-alpha5’ } … Read more

Resize a large bitmap file to scaled output file on Android

No. I’d love for someone to correct me, but I accepted the load/resize approach you tried as a compromise. Here are the steps for anyone browsing: Calculate the maximum possible inSampleSize that still yields an image larger than your target. Load the image using BitmapFactory.decodeFile(file, options), passing inSampleSize as an option. Resize to the desired … Read more

Load a WPF BitmapImage from a System.Drawing.Bitmap

How about loading it from MemoryStream? using(MemoryStream memory = new MemoryStream()) { bitmap.Save(memory, ImageFormat.Png); memory.Position = 0; BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = memory; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); }

Convert a bitmap into a byte array

There are a couple ways. ImageConverter public static byte[] ImageToByte(Image img) { ImageConverter converter = new ImageConverter(); return (byte[])converter.ConvertTo(img, typeof(byte[])); } This one is convenient because it doesn’t require a lot of code. Memory Stream public static byte[] ImageToByte2(Image img) { using (var stream = new MemoryStream()) { img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); return stream.ToArray(); } } This … Read more