Cannot generate texture from bitmap异常的解决方案

今天在写一个布局时,运行后报错,ImageView显示为黑色,无法加载图片,造成Cannot generate texture from bitmap异常,这个错误我是第一次看见,遂百度谷歌,查找到了一些解决方案:


参考http://www.2cto.com/kf/201410/342644.html
其中提到可能是android 4.0之后系统开启了GPU硬件加速导致的,可通过关闭加速来解决
注意:设置图片的非硬件加速模式是在api11之后添加的,所以需要进行版本控制
关于安卓硬件加速的还有一篇非常详细的博文,有兴趣的可以看下
Android-关于安卓手机的硬件加速问题
此处抄录部分内容:

从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速使用GPU进行View上的绘制操作。
硬件加速可以在一下四个级别开启或关闭:
Application
Activity
Window
View

Application级别

往您的应用程序AndroidManifest.xml文件为application标签添加如下的属性即可为整个应用程序开启硬件加速:

<application android:hardwareAccelerated="true" ...>

Activity级别

您还可以控制每个activity是否开启硬件加速,只需在activity元素中添加android:hardwareAccelerated属性即可办到。比如下面的例子,在application级别开启硬件加速,但在某个activity上关闭硬件加速。

<application android:hardwareAccelerated="true">
   <activity ... /> 
   <activity android:hardwareAccelerated="false" />
 </application>

Window级别

如果您需要更小粒度的控制,可以使用如下代码开启某个window的硬件加速:

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注:目前还不能在window级别关闭硬件加速。

View级别

您可以在运行时用以下的代码关闭单个view的硬件加速:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
注:您不能在view级别开启硬件加速
项目中曾遇到过加速后产生:Cannot generate texture from bitmap的问题。关闭后正常


所使用的图片格式不对,一般推荐使用PNG格式,当使用gif格式时,尤其注意android为节省内存,一般不支持显示gif或只显示第一帧,若非使用动态图,尽量不要使用gif,或者使用一些特殊的方法来支持gif加载

此处参考Android中轻松显示Gif图片

创建一个工具类
MyGifView.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;

public class MyGifView extends View{
private long movieStart;
private Movie movie;
    //此处必须重写该构造方法
public MyGifView(Context context,AttributeSet attributeSet) {
super(context,attributeSet);
//以文件流(InputStream)读取进gif图片资源
movie=Movie.decodeStream(getResources().openRawResource(R.drawable.keyboard));
}

@Override
protected void onDraw(Canvas canvas) {
long curTime=android.os.SystemClock.uptimeMillis();
//第一次播放
if (movieStart == 0) {
movieStart = curTime;
}
if (movie != null) {
int duraction = movie.duration();
int relTime = (int) ((curTime-movieStart)%duraction);
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
//强制重绘
invalidate();
}
super.onDraw(canvas);
}
}
布局示例:
<com.example.showgifimage.MyGifView 
       android:id="@+id/iv"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:layout_margin="20dp"
       /> 

注意:标签的设置 <com.example.showgifimage.MyGifView/>

格式:包名+.类名

关于gif加载还有其他的方法,例如
在Android中显示GIF动画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `generate_from_frequencies` 是一个 Python 中的函数,它可以根据给定的字典中的键值对生成一个频率分布表的序列。这个函数通常用于文本处理和自然语言处理领域中的词频统计。给定一个字典,它的键是文本中出现的单词,而值是这个单词出现的次数,`generate_from_frequencies` 函数可以将这个字典转化为一个序列,其中每个元素表示一个单词和它的出现次数。这个函数常常与 Python 中的 `Counter` 类一起使用。 ### 回答2: generate_from_frequencies是一个Python中的函数,可用于从给定的字典中获取频率信息并生成一个词云。在自然语言处理和数据分析中,词频分析是非常重要的,使用generate_from_frequencies函数可以将这些词频可视化,方便进一步分析。 函数需要一个字典参数作为输入,字典中包括词语和相应的频率。例如,一个字典可能包括如下键值对: {"hello": 5, "world": 3, "python": 2} 其中,"hello"出现了5次,"world"出现了3次,"python"出现了2次。这个字典代表了一个文本数据集中每个单词的出现次数。假设我们需要将这些单词生成一个词云图,就可以使用generate_from_frequencies函数。 在使用该函数之前,可能需要先安装必要的库(例如numpy,PIL,matplotlib等)。使用以下方式导入库: ``` from wordcloud import WordCloud import matplotlib.pyplot as plt ``` 然后,我们可以使用generate_from_frequencies函数创建一个WordCloud对象,并使用该对象的generate_from_frequencies方法来生成词云图。示例代码如下: ``` # 生成词云图 wordcloud = WordCloud(width=800, height=800, background_color='white') freq_dict = {"hello": 5, "world": 3, "python": 2} wordcloud.generate_from_frequencies(freq_dict) # 绘制词云图 plt.figure(figsize=(8, 8), facecolor=None) plt.imshow(wordcloud) plt.axis("off") plt.tight_layout(pad=0) plt.show() ``` 该代码将生成一个800x800像素大小的白色背景词云图,词汇频率根据输入字典进行计算。在生成的词云图中,"hello"、"world"和"python"三个词汇的大小将与它们在频率字典中的计数成比例。 使用generate_from_frequencies函数可将输入字典的键作为标签,将字典的值转换为相应单词的权重。该函数还允许我们指定词云图的大小,颜色,字体等属性,以便更好地可视化词频信息。 总的来说,generate_from_frequencies是一种方便可视化文本数据词频的方法,提供了一种有效的方式来了解文本数据集的各种特征,如高频词,特定领域词汇等。这可以帮助进一步分析文本数据并从中发现有用的信息。 ### 回答3: generate_from_frequencies 是一个 Python 中的类方法,它可以从输入的字典中生成一个频率分布表。该方法主要用于文本分析、自然语言处理、数据挖掘和机器学习等领域中。它可以帮助我们计算文本中各个单词出现的频率,以便更好地帮助我们分析文本信息。 在 Python 中,这个方法通常是在 collections 模块的 Counter 类中使用的,其语法如下: ```python from collections import Counter frequency_distribution = Counter(text) ``` 其中,text 代表一个字符串,即需要统计频率的文本。 使用 generate_from_frequencies 方法对于计算文本中各个单词出现频率非常方便,代码如下: ```python from nltk import FreqDist fdist = FreqDist(text) ``` 在这里,nltk 是自然语言处理工具包,FreqDist 是其中一个类,用于生成文本中各个单词的频率分布表。text 代表需要分析的文本。 通过 generate_from_frequencies 方法,我们可以获得一个由单词到出现频率映射的字典,即 word_frequency_map。该字典可以用于计算每个单词的出现概率,以及根据概率生成新的随机文本。例如,我们可以使用该字典生成新的歌词、新闻标题、社交媒体帖子等。 总之,generate_from_frequencies 方法是一个极其有用的分析文本频率的工具,它可以帮助我们更好地理解文本内容,并从中发现隐藏的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值