“画布:试图绘制太大的位图"; Android Studio中的问题 [英] "Canvas: trying to draw too large bitmap" problem in Android Studio
问题描述
当我尝试从网站获取bitmap
时,出现了Canvas: trying to draw too large
问题.
When I try to get bitmap
from website, Canvas: trying to draw too large
problem is occured.
所以我在Google上搜索了此问题,许多人写了他们的解决方案,但是该解决方案是关于目录drawable中的位图文件的.
So I search this problem on google and many people wrote their solutions, but that solution is about bitmap file in directory drawable.
- 如果从网站获取的位图图像太大,该怎么办?
这是我的代码.
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);
发生问题时,变量postImgUrl为" http://www. hstree.org/data/ck_tmp/202001/de3kOOtFqV6Bc2o7xCa7vg1UwFWJ.jpg ",变量postImg为ImageView.
When a problem occurs, variable postImgUrl is "http://www.hstree.org/data/ck_tmp/202001/de3kOOtFqV6Bc2o7xCa7vg1UwFWJ.jpg" and variable postImg is ImageView.
请告诉我.
推荐答案
该错误表示Bitmap的大小对于ImageView而言太大.
在setImageBitmap()
到ImageView之前,您可以使用Bitmap.createScaledBitmap()
将大位图缩放为较小的位图.然后,您可以将位图安全地设置为ImageView.
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.
示例代码:
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();
}
}
这篇关于“画布:试图绘制太大的位图"; Android Studio中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!