When I try to get bitmap
from website, Canvas: trying to draw too large
problem is occured.
So I search this problem on google and many people wrote their solutions, but that solution is about bitmap file in directory drawable.
This is my code.
Thread mThread = new Thread() {
@Override
public void run() {
try {
URL url = new URL(postImgUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream inputStream = conn.getInputStream();
postImgBitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
mThread.start();
mThread.join();
if (postImgBitmap != null){
postImg.setImageBitmap(postImgBitmap);
When a problem occurs, variable postImgUrl is "http://www.hstree.org/data/ck_tmp/202001/de3kOOtFqV6Bc2o7xCa7vg1UwFWJ.jpg" and variable postImg is ImageView.
Please advise me.
The error means the size of Bitmap is too large for the ImageView.
Before setImageBitmap()
to ImageView, you can scale the large Bitmap to a smaller one with Bitmap.createScaledBitmap()
. Then you can safely set the Bitmap to ImageView.
A sample code:
public class MainActivity extends AppCompatActivity {
private static final String imageUrl
= "http://www.hstree.org/data/ck_tmp/202001/de3kOOtFqV6Bc2o7xCa7vg1UwFWJ.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = findViewById(R.id.imageView);
new Thread(new Runnable() {
@Override
public void run() {
URL url = null;
try {
url = new URL(imageUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try (BufferedInputStream bufferedInputStream
= new BufferedInputStream(url.openStream())) {
Bitmap bitmap = BitmapFactory.decodeStream(bufferedInputStream);
final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
bitmap,
(int) (bitmap.getWidth() * 0.1),
(int) (bitmap.getHeight() * 0.1),
true
);
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(scaledBitmap);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}