Articles of bitmap

为什么我没有内存不足的例外?

我有一个高分辨率图像(2588 * 1603)在drawable文件夹中。 如果我使用下面的代码(1)为imageView设置它我没有得到OOMexception和按预期分配的图像: public class MainActivity extends ActionBarActivity{ private ImageView mImageView; int mImageHeight = 0; int mImageWidth = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imageView); mImageView.setScaleType(ScaleType.FIT_CENTER); BitmapFactory.Options sizeOption = new BitmapFactory.Options(); sizeOption.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.drawable.a, sizeOption); mImageHeight = sizeOption.outHeight; mImageWidth = sizeOption.outWidth; mImageView.post(new Runnable() { @Override public […]

Android – 使用Flood-Fill时的Canvas Black

当我实现我的flood-fill类时,它将整个Bitmap变为黑色。 显然这不是预期的效果。 我查看了以下主题: https://stackoverflow.com/questions/24030858/flood-fill-is-coloring-my-entire-screen 黑色图像导致的洪水填充算法 在android上填充着色 从我所看到的,我正在做他们在这些解决方案中提出的所有内容,但它并没有让我find解决问题的方法。 所以要切入追逐,这里的代码有一些简短的解释。 XML 我正在使用相对布局并将两个ImageViews直接定位(堆叠)在彼此之上。 它们都具有相同的图像,这就产生了能够在图像上绘制的错觉。 但是,您实际上只是在透明覆盖上绘图。 …. … 帆布 然后我使用此代码创建我的Canvas ,并确保正确设置我的图层types。 public void setCanvas() { if(mFile != null && mFile.exists()) { mPictureBitmap = BitmapFactory.decodeFile(mFile.getAbsolutePath()); mBitmap = Bitmap.createScaledBitmap(mPictureBitmap, mImageView.getWidth(), mImageView.getHeight(), false); mPictureBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true); mBitmap = mPictureBitmap.copy(Bitmap.Config.ARGB_8888, true); mSceneBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true); mBlurBitmap = blurImage(mPictureBitmap); mCanvas = new Canvas(mBitmap); […]

高分辨率图像 – OutOfMemoryError

我正在为Galaxy S4开发一个应用程序。 该应用程序的要求之一是使用包含1920×1080像素的图像的SplashScreen。 它是一个高质量的.jpeg图像,图像的大小约为2兆字节 。 问题是我一启动应用程序就得到一个OutOfMemoryError 。 我很震惊,这已经发生了只有2兆字节的图像? 如何解决此问题并显示图像? 不能选择更改图像的尺寸或大小。 SplashScreen.java public class Splashscreen extends Activity { private static final int SPLASH_DURATION = 2000; private boolean isBackPressed = false; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); setContentView(R.layout.splashscreen); Handler h = new Handler(); h.postDelayed(new Runnable() { @Override public void run() { // check […]

Android:使用比双线性更好的重采样算法调整位图大小(如Lanczos3)

是否有任何方法或外部库可以使用Lanczos (理想情况下)或至少bicubic alg调整图像大小。 在Android下? ( 当然更快更好,但质量优先,处理时间次要) 我到目前为止所做的一切都是这样的: Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true); 然而,它使用双线性滤波器,输出质量很差。 特别是如果你想保留细节(如细线或可读文本)。 有许多优秀的Java库,例如这里讨论的: Java – 调整图像大小而不会降低质量 但是它总是依赖于Java awt类,如java.awt.image.BufferedImage ,所以它不能在Android中使用。 有没有办法如何更改Bitmap.createScaledBitmap()方法中的默认(双线性)filter或某些库,如Morten Nobel的lib ,它能够与android.graphics.Bitmap类一起使用(或者使用一些原始表示forms,如@Tron in评论指出)?

避免从Android回收位图

我有两个asynchronous任务之一,其中一个下载图像,另一个添加模糊效果,但我的问题是,在onPostExecutecallback的下载任务我想把位图在一个ImageView中,然后传递给第二个任务运用模糊效果,但有时我得到 trying to use a recycled bitmap 我已经search了很多关于这个问题,但我没有find一个明确的解决scheme,以避免这个问题,特别是我使用这个图像在一个视图的分页器这是我的代码 protected void onPostExecute(Bitmap result) { Bitmap bitmap=result; bmImage.setImageBitmap(bitmap); if(bitmap!=null && !bitmap.isRecycled()){ Bitmap bb=bitmap; new blurTask().execute(bb);} } 这是我的完整的片段代码 public class ScreenSlidePageFragment extends Fragment { int page; String img; // ImageView blured; String[] checkblur; int size; Boolean onCreateViewCalled = false; ImageView blur; ImageView imageView; public static ScreenSlidePageFragment newInstance(int page, […]

如何将文件读入Java位图?

我知道如何将一个位图文件读入一个字节数组。 如何将字节数组转换为Java位图?

无知(可能的)Android内存泄漏

我一直在面对一些烦人的OutOfMemoryErrors ,即使在确保所有的Bitmaps都正确缩放之后。事实上,这个问题似乎并没有与Bitmaps有关,但我可能是错的。 出于testing和错误隔离的目的,我一直在使用我的导航抽屉(不使用后退button)在两个活动(让我们称之为Main和List)之间进行切换。 我可以在DDMS中看到每次返回时分配的内存增加了大约180 KB。 我已经做了内存转储,并使用eclipse MAT来分析3个不同的时间点: 我怀疑有内存泄漏,但是我无法find原因。 根据内存转储,它看起来是“剩余”和java.lang.FinalizerReference不断增加。 在这个问题中的用户在他的内存转储中也有很多FinalizerReferences ,但答案不是很清楚。 我在最后一个时间点所做的泄漏嫌疑人报告并不是很有帮助,因为它怀疑android.content.res.Resources和android.graphics.Bitmap似乎不会随着时间的推移而增长: 在其中一个报告(可惜,​​这里不存在),我已经看到13个android.widget.ListView实例指出潜在的泄漏嫌疑人。 这些内存增加发生在任何活动之间的转换(不仅仅是本例中使用的Main和List I)。 我怎样才能find(非明显的)内存泄漏? 我一直在挠头,所以任何帮助和提示都会很棒。 编辑: 位图(@ OrhanC1):我已经评论过上述两个活动中的任何Bitmap实例,并且内存仍然增加。 内存转储仍然显示一些位图,但我相信它们与资源相关,而不是我分配的实际位图。 关于自定义字体(@erakitin):我正在使用它们,但是我使用单例在我的Application上下文( public class MyApp extends Application )中保留每个Typeface的单个实例。 我已经尝试过在上述两个活动中对字体的引用进行评论,并且内存仍然增加。 我不认为我正在泄漏Context (@DigCamara):我没有在这两个活动中持有任何静态引用,我使用Application上下文,而不是除了在一个适配器的Activity 。 如果我留在同一个Activity并做一些屏幕旋转,内存不会增加。 基于@ NickT的评论:我可以看到我有两个活动的许多实例。 这些内存增加是否仅仅是后端堆栈活动数量增加的结果,而不是内存泄漏 (我虽然操作系统处理了, 显然不是 )? 如果我使用FLAG_ACTIVITY_REORDER_TO_FRONT意图标志,那么内存只会增加,直到所有不同的活动都被实例化(一次)。 对于这个问题很有用: Android在内存不足时不会从堆栈中查杀活动 。