@Override public void onNewResultImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { if (!dataSource.isFinished()) { return; } CloseableReference<CloseableImage> closeableImageRef = dataSource.getResult(); Bitmap bitmap = null; if (closeableImageRef != null && closeableImageRef.get() instanceof CloseableBitmap) { bitmap = ((CloseableBitmap) closeableImageRef.get()).getUnderlyingBitmap(); } try { onNewResultImpl(bitmap); } finally { CloseableReference.closeSafely(closeableImageRef); } }
@Override public void onRun() throws Throwable { Log.i(TAG, "RUNNING UploadJob for Item["+itemId+"] Uri["+uri.toString()+"]"); if(MediaUtils.isPhoto(UriUtils.extractMimeType(weakReference.get(), uri))) { DataSource<CloseableReference<CloseableImage>> dataSource = Fresco.getImagePipeline().fetchDecodedImage(ImageRequest.fromUri(uri), weakReference.get()); Throwable failureCause = dataSource.getFailureCause(); if (failureCause != null) { throw failureCause; } CloseableReference<CloseableImage> result = dataSource.getResult(); if (result != null) { CloseableImage closeableImage = result.get(); if (closeableImage instanceof CloseableBitmap) { Bitmap bitmap = ((CloseableBitmap) closeableImage).getUnderlyingBitmap(); uploadFile(createImageTempFile(bitmap)); } } }else{ uploadFile(new File(uri.getPath())); } }
private void storeEntries( List<CountingMemoryCacheInspector.DumpInfoEntry<CacheKey, CloseableImage>> entries, int i, PrintStream writer, File directory) throws IOException { String filename; for (CountingMemoryCacheInspector.DumpInfoEntry<CacheKey, CloseableImage> entry : entries) { CloseableImage closeableImage = entry.value.get(); if (closeableImage instanceof CloseableBitmap) { CloseableBitmap closeableBitmap = (CloseableBitmap) closeableImage; filename = "tmp" + i + ".png"; writer.println(formatStrLocaleSafe( "Storing image %d as %s. Key: %s", i, filename, entry.key)); storeImage( closeableBitmap.getUnderlyingBitmap(), new File(directory, filename), Bitmap.CompressFormat.PNG, 100); } else { writer.println(formatStrLocaleSafe( "Image %d has unrecognized type %s. Key: %s", i, closeableImage, entry.key)); } i++; } }
/** * Returns an unsafe bitmap reference. Do not assign the result of this method to anything other * than a local variable, or it will no longer work with the reference count goes to zero. */ /* package */ @Nullable Bitmap getBitmap() { if (mImageRef == null) { return null; } CloseableImage closeableImage = mImageRef.get(); if (!(closeableImage instanceof CloseableBitmap)) { mImageRef.close(); mImageRef = null; return null; } return ((CloseableBitmap) closeableImage).getUnderlyingBitmap(); }
@Override public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) { super.onFinalImageSet(id, imageInfo, animatable); if (mLoadingListener != null && mImageView != null) { ImageView imageView = mImageView.get(); if (imageInfo != null) { if (imageInfo instanceof CloseableBitmap) { mLoadingListener.onLoadingComplete(mImageUri, imageView, ((CloseableBitmap) imageInfo).getUnderlyingBitmap()); return; } } mLoadingListener.onLoadingComplete(mImageUri, imageView, null); } }
private static int getBitmapSizeBytes(@Nullable CloseableImage image) { if (!(image instanceof CloseableBitmap)) { return 0; } return BitmapUtil.getSizeInBytes(((CloseableBitmap) image).getUnderlyingBitmap()); }
@Override public void onNewResultImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { if (!dataSource.isFinished()) { return; } CloseableReference<CloseableImage> closeableImageRef = dataSource.getResult(); Bitmap bitmap = null; if (closeableImageRef != null && closeableImageRef.get() instanceof CloseableBitmap) { bitmap = ((CloseableBitmap) closeableImageRef.get()).getUnderlyingBitmap(); } if(bitmap!=null ){ if(bitmap.isRecycled()){ onFailure(dataSource); }else { onNewResultImpl(bitmap,dataSource); } return; } // //如果bitmap为空 // File cacheFile = ImageLoader.getActualLoader().getFileFromDiskCache(finalUrl); // if(cacheFile ==null){ // onFailure(dataSource); // return; // } // //还要判断文件是不是gif格式的 // if (!"gif".equalsIgnoreCase(MyUtil.getRealType(cacheFile))){ // onFailure(dataSource); // return; // } // Bitmap bitmapGif = GifUtils.getBitmapFromGifFile(cacheFile);//拿到gif第一帧的bitmap // if(width>0 && height >0) { // bitmapGif = MyUtil.compressBitmap(bitmapGif, true, width, height);//将bitmap压缩到指定宽高。 // } // if (bitmapGif != null) { // onNewResultImpl(bitmap,dataSource); // } else { // onFailure(dataSource); // } /* try { onNewResultImpl(bitmap); } finally { //CloseableReference.closeSafely(closeableImageRef); }*/ }
@Override public void onNewResult(DataSource<CloseableReference<CloseableImage>> dataSource) { if (!dataSource.isFinished()) { // only interested in final image, no need to close the dataSource return; } try { if (mDataSource != dataSource) { // Shouldn't ever happen, but let's be safe (dataSource got closed by callback still fired?) return; } mDataSource = null; CloseableReference<CloseableImage> imageReference = dataSource.getResult(); if (imageReference == null) { // Shouldn't ever happen, but let's be safe (dataSource got closed by callback still fired?) return; } CloseableImage image = imageReference.get(); if (!(image instanceof CloseableBitmap)) { // only bitmaps are supported imageReference.close(); return; } mImageRef = imageReference; Bitmap bitmap = getBitmap(); if (bitmap == null) { // Shouldn't ever happen, but let's be safe. return; } BitmapUpdateListener listener = Assertions.assumeNotNull(mBitmapUpdateListener); listener.onBitmapReady(bitmap); listener.onImageLoadEvent(ImageLoadEvent.ON_LOAD); listener.onImageLoadEvent(ImageLoadEvent.ON_LOAD_END); } finally { dataSource.close(); } }
private void handleBitmap(CloseableBitmap closeableBitmap, int position) { Bitmap bitmap = closeableBitmap.getUnderlyingBitmap(); map.put(position, bitmap); }
/** * 从Fresco的缓存中获取Bitmap * @return */ private Bitmap getBitmapFromCache(String imgUrl){ Bitmap bm = null; ImagePipeline imagePipeline = Fresco.getImagePipeline(); ImageRequest request = ImageRequestBuilder .newBuilderWithSource(Uri.parse(imgUrl)) .build(); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchImageFromBitmapCache(request, this); try{ CloseableReference<CloseableImage> imageReference = dataSource.getResult(); if(imageReference != null){ try{ // do something CloseableImage image = imageReference.get(); if(image instanceof CloseableBitmap){ Bitmap bitmap = ((CloseableBitmap)image).getUnderlyingBitmap(); Log.i(TAG, "getBitmapFromCache>>> get cached bitmap success"); bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight()); return bm; } }finally { CloseableReference.closeSafely(imageReference); } }else { // cache miss return null; } }finally { dataSource.close(); } return null; }