當前位置: 首頁>>代碼示例>>Java>>正文


Java BitmapRegionDecoder.recycle方法代碼示例

本文整理匯總了Java中android.graphics.BitmapRegionDecoder.recycle方法的典型用法代碼示例。如果您正苦於以下問題:Java BitmapRegionDecoder.recycle方法的具體用法?Java BitmapRegionDecoder.recycle怎麽用?Java BitmapRegionDecoder.recycle使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在android.graphics.BitmapRegionDecoder的用法示例。


在下文中一共展示了BitmapRegionDecoder.recycle方法的12個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: updateFullImage

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
private void updateFullImage(Path path, Future<BitmapRegionDecoder> future) {
    ImageEntry entry = mImageCache.get(path);
    if (entry == null || entry.fullImageTask != future) {
        BitmapRegionDecoder fullImage = future.get();
        if (fullImage != null) fullImage.recycle();
        return;
    }

    entry.fullImageTask = null;
    entry.fullImage = future.get();
    if (entry.fullImage != null) {
        if (path == getPath(mCurrentIndex)) {
            updateTileProvider(entry);
            mPhotoView.notifyImageChange(0);
        }
    }
    updateImageRequests();
}
 
開發者ID:asm-products,項目名稱:nexus-gallery,代碼行數:19,代碼來源:PhotoDataAdapter.java

示例2: readBitmap

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
private Bitmap readBitmap (final int scalePercentage, final Rect cropRect) throws IOException {
	if (100 % scalePercentage != 0) throw new IllegalArgumentException("scalePercentage " + scalePercentage + " is not a int ratio.");
	final Options opts = new Options();
	opts.inPurgeable = true;
	opts.inInputShareable = true;
	opts.inSampleSize = 100 / scalePercentage;

	if (cropRect != null) {
		final BitmapRegionDecoder dec = BitmapRegionDecoder.newInstance(openFileDescriptor().getFileDescriptor(), true);
		try {
			return dec.decodeRegion(cropRect, opts);
		}
		finally {
			dec.recycle();
		}
	}

	return BitmapFactory.decodeFileDescriptor(openFileDescriptor().getFileDescriptor(), null, opts);
}
 
開發者ID:haku,項目名稱:Onosendai,代碼行數:20,代碼來源:ImageMetadata.java

示例3: getHotseatPalette

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
@TargetApi(Build.VERSION_CODES.N)
private Palette getHotseatPalette() {
    WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
    if (AndroidVersion.isAtLeastNougat) {
        try (ParcelFileDescriptor fd = wallpaperManager
                .getWallpaperFile(WallpaperManager.FLAG_SYSTEM)) {
            BitmapRegionDecoder decoder = BitmapRegionDecoder
                    .newInstance(fd.getFileDescriptor(), false);
            int height = decoder.getHeight();
            Rect decodeRegion = new Rect(0, (int) (height * (1f - HOTSEAT_FRACTION)),
                    decoder.getWidth(), height);
            Bitmap bitmap = decoder.decodeRegion(decodeRegion, null);
            decoder.recycle();
            if (bitmap != null) {
                return Palette.from(bitmap).clearFilters().generate();
            }
        } catch (IOException | NullPointerException e) {
            e.printStackTrace();
        }
    }

    Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap();
    return Palette.from(wallpaper)
            .setRegion(0, (int) (wallpaper.getHeight() * (1f - HOTSEAT_FRACTION)),
                    wallpaper.getWidth(), wallpaper.getHeight())
            .clearFilters()
            .generate();
}
 
開發者ID:enricocid,項目名稱:LaunchEnr,代碼行數:29,代碼來源:ColorExtractionService.java

示例4: getStatusBarPalette

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
@TargetApi(Build.VERSION_CODES.N)
private Palette getStatusBarPalette() {
    WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
    int statusBarHeight = getResources()
            .getDimensionPixelSize(R.dimen.status_bar_height);

    if (AndroidVersion.isAtLeastNougat) {
        try (ParcelFileDescriptor fd = wallpaperManager
                .getWallpaperFile(WallpaperManager.FLAG_SYSTEM)) {
            BitmapRegionDecoder decoder = BitmapRegionDecoder
                    .newInstance(fd.getFileDescriptor(), false);
            Rect decodeRegion = new Rect(0, 0,
                    decoder.getWidth(), statusBarHeight);
            Bitmap bitmap = decoder.decodeRegion(decodeRegion, null);
            decoder.recycle();
            if (bitmap != null) {
                return Palette.from(bitmap).clearFilters().generate();
            }
        } catch (IOException | NullPointerException e) {
            e.printStackTrace();
        }
    }

    Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap();
    return Palette.from(wallpaper)
            .setRegion(0, 0, wallpaper.getWidth(), statusBarHeight)
            .clearFilters()
            .generate();
}
 
開發者ID:enricocid,項目名稱:LaunchEnr,代碼行數:30,代碼來源:ColorExtractionService.java

示例5: recycle

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
/**
 * While there are decoders in the map, wait until each is available before acquiring,
 * recycling and removing it. After this is called, any call to {@link #acquire()} will
 * block forever, so this call should happen within a write lock, and all calls to
 * {@link #acquire()} should be made within a read lock so they cannot end up blocking on
 * the semaphore when it has no permits.
 */
private synchronized void recycle() {
    while (!decoders.isEmpty()) {
        BitmapRegionDecoder decoder = acquire();
        decoder.recycle();
        decoders.remove(decoder);
    }
}
 
開發者ID:alphater,項目名稱:garras,代碼行數:15,代碼來源:SkiaPooledImageRegionDecoder.java

示例6: readBitmapInternal

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
private Bitmap readBitmapInternal(BitmapFactory.Options options, boolean mayUseRegionDecoder,
		boolean mayUseWebViewDecoder) {
	ImageData imageData = getImageData();
	if (imageData.type == ImageType.NOT_IMAGE) {
		return null;
	}
	if (imageData.type != ImageType.IMAGE_SVG) {
		Bitmap bitmap = readBitmapSimple(options);
		if (bitmap != null) {
			return bitmap;
		}
		if (mayUseRegionDecoder && isRegionDecoderSupported()) {
			InputStream input = null;
			BitmapRegionDecoder decoder = null;
			try {
				input = openInputStream();
				decoder = BitmapRegionDecoder.newInstance(input, false);
				return decoder.decodeRegion(new Rect(0, 0, decoder.getWidth(), decoder.getHeight()), options);
			} catch (IOException e) {
				Log.persistent().stack(e);
			} finally {
				IOUtils.close(input);
				if (decoder != null) {
					decoder.recycle();
				}
			}
		}
	}
	if (mayUseWebViewDecoder) {
		return WebViewBitmapDecoder.loadBitmap(this, options);
	}
	return null;
}
 
開發者ID:Mishiranu,項目名稱:Dashchan,代碼行數:34,代碼來源:FileHolder.java

示例7: decodeSquare

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
private WeakReference<Bitmap> decodeSquare(WeakReference<byte[]> data, BitmapFactory.Options options) {
    int size = Math.min(options.outWidth, options.outHeight);
    //We need to crop square image from the center of the image
    int indent = (Math.max(options.outWidth, options.outHeight) - size) / 2;
    Rect rect;
    if (options.outHeight >= options.outWidth) {
        rect = new Rect(0, indent, size, size + indent);
    } else {
        rect = new Rect(indent, 0, size + indent, size);
    }

    options.inJustDecodeBounds = false;
    options.inPurgeable = true;
    options.inInputShareable = true;

    WeakReference<Bitmap> result;
    try {
        BitmapRegionDecoder regionDecoder = BitmapRegionDecoder.newInstance(data.get(), 0, data.get().length, true);
        result = new WeakReference<>(regionDecoder.decodeRegion(rect, options));
        regionDecoder.recycle();
    } catch (IOException ex) {
        Log.e(CropToSquareImageTask.class, "exception creating BitmapRegionDecoder", ex);
        throw new RuntimeException("Error creating BitmapRegionDecoder");
    }

    return result;
}
 
開發者ID:RandoApp,項目名稱:Rando-android,代碼行數:28,代碼來源:CropToSquareImageTask.java

示例8: doInBackground

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
@Override
protected Bitmap doInBackground (final Void... params) {
	LOG.i("Generating preview: s=%s q=%s.", this.dlg.getScale(), this.dlg.getQuality());
	try {
		final Bitmap scaled = this.srcMetadata.getBitmap(this.dlg.getScale().getPercentage());
		final ByteArrayOutputStream compOut = new ByteArrayOutputStream(512 * 1024);
		if (scaled.compress(Bitmap.CompressFormat.JPEG, this.dlg.getQuality().getPercentage(), compOut)) {
			this.summary
					.append(this.srcMetadata.getWidth()).append(" x ").append(this.srcMetadata.getHeight())
					.append(" (").append(IoHelper.readableFileSize(this.srcMetadata.getSize())).append(")")
					.append(" --> ").append(scaled.getWidth()).append(" x ").append(scaled.getHeight())
					.append(" (").append(IoHelper.readableFileSize(compOut.size())).append(")");
			final BitmapRegionDecoder dec = BitmapRegionDecoder.newInstance(compOut.toBufferedInputStream(), true);
			try {
				final int srcW = dec.getWidth();
				final int srcH = dec.getHeight();
				final int tgtW = this.dlg.getRootView().getWidth(); // FIXME Workaround for ImageView width issue.  Fix properly with something like FixedWidthImageView.
				final int tgtH = this.imgPreview.getHeight();
				final int left = srcW > tgtW ? (srcW - tgtW) / 2 : 0;
				final int top = srcH > tgtH ? (srcH - tgtH) / 2 : 0;
				final BitmapFactory.Options options = new BitmapFactory.Options();
				options.inPurgeable = true;
				options.inInputShareable = true;
				return dec.decodeRegion(new Rect(left, top, left + tgtW, top + tgtH), options);
			}
			finally {
				dec.recycle();
			}
		}
		this.summary.append("Failed to compress image."); //ES
		return null;
	}
	// XXX Many cases of OutOfMemoryError have been reported, particularly on low end hardware.
	// Try not to upset the user too much by not dying completely if possible.
	catch (final Throwable e) {
		LOG.e("Failed to generate preview image.", e);
		this.summary.append(e.toString());
		return null;
	}
}
 
開發者ID:haku,項目名稱:Onosendai,代碼行數:41,代碼來源:PictureResizeDialog.java

示例9: decodeStaticImageFromStream

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
protected CloseableReference<Bitmap> decodeStaticImageFromStream(
    InputStream inputStream, BitmapFactory.Options options, @Nullable Rect regionToDecode) {
  Preconditions.checkNotNull(inputStream);
  int targetWidth = options.outWidth;
  int targetHeight = options.outHeight;
  if (regionToDecode != null) {
    targetWidth = regionToDecode.width();
    targetHeight = regionToDecode.height();
  }
  int sizeInBytes =
      BitmapUtil.getSizeInByteForBitmap(targetWidth, targetHeight, options.inPreferredConfig);
  final Bitmap bitmapToReuse = mBitmapPool.get(sizeInBytes);
  if (bitmapToReuse == null) {
    throw new NullPointerException("BitmapPool.get returned null");
  }
  options.inBitmap = bitmapToReuse;

  Bitmap decodedBitmap = null;
  ByteBuffer byteBuffer = mDecodeBuffers.acquire();
  if (byteBuffer == null) {
    byteBuffer = ByteBuffer.allocate(DECODE_BUFFER_SIZE);
  }
  try {
    options.inTempStorage = byteBuffer.array();
    if (regionToDecode != null) {
      BitmapRegionDecoder bitmapRegionDecoder = null;
      try {
        bitmapToReuse.reconfigure(targetWidth, targetHeight, options.inPreferredConfig);
        bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, true);
        decodedBitmap = bitmapRegionDecoder.decodeRegion(regionToDecode, options);
      } catch (IOException e) {
        FLog.e(TAG, "Could not decode region %s, decoding full bitmap instead.", regionToDecode);
      } finally {
        if (bitmapRegionDecoder != null) {
          bitmapRegionDecoder.recycle();
        }
      }
    }
    if (decodedBitmap == null) {
      decodedBitmap = BitmapFactory.decodeStream(inputStream, null, options);
    }
  } catch (RuntimeException re) {
    mBitmapPool.release(bitmapToReuse);
    throw re;
  } finally {
    mDecodeBuffers.release(byteBuffer);
  }

  if (bitmapToReuse != decodedBitmap) {
    mBitmapPool.release(bitmapToReuse);
    decodedBitmap.recycle();
    throw new IllegalStateException();
  }

  return CloseableReference.of(decodedBitmap, mBitmapPool);
}
 
開發者ID:weiwenqiang,項目名稱:GitHub,代碼行數:57,代碼來源:ArtDecoder.java

示例10: onSave

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
@Override
public void onSave(final WallpaperPickerActivity a) {
    boolean finishActivityWhenDone = true;
    BitmapCropTask.OnBitmapCroppedHandler h = new BitmapCropTask.OnBitmapCroppedHandler() {
        @Override
        public void onBitmapCropped(byte[] imageBytes, Rect hint) {
            Bitmap thumb = null;
            Point thumbSize = getDefaultThumbnailSize(a.getResources());
            if (imageBytes != null) {
                // rotation is set to 0 since imageBytes has already been correctly rotated
                thumb = createThumbnail(
                        thumbSize, null, null, imageBytes, null, 0, 0, true);
                a.getSavedImages().writeImage(thumb, imageBytes);
            } else {
                try {
                    // Generate thumb
                    Point size = getDefaultThumbnailSize(a.getResources());
                    Rect finalCropped = new Rect();
                    Utils.getMaxCropRect(hint.width(), hint.height(), size.x, size.y, false)
                            .roundOut(finalCropped);
                    finalCropped.offset(hint.left, hint.top);

                    InputStream in = a.getContentResolver().openInputStream(mUri);
                    BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(in, true);

                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inSampleSize = finalCropped.width() / size.x;
                    thumb = decoder.decodeRegion(finalCropped, options);
                    decoder.recycle();
                    Utils.closeSilently(in);
                    if (thumb != null) {
                        thumb = Bitmap.createScaledBitmap(thumb, size.x, size.y, true);
                    }
                } catch (IOException e) { }
                PointF center = a.mCropView.getCenter();

                Float[] extras = new Float[] {
                        a.mCropView.getScale(),
                        center.x,
                        center.y
                };
                a.getSavedImages().writeImage(thumb, mUri, extras);
            }
        }
    };
    boolean shouldFadeOutOnFinish = a.getWallpaperParallaxOffset() == 0f;
    a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone, shouldFadeOutOnFinish);
}
 
開發者ID:TeamBrainStorm,項目名稱:SimpleUILauncher,代碼行數:49,代碼來源:WallpaperPickerActivity.java

示例11: createClippedBitmap

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
private Bitmap createClippedBitmap() {
    if (mSampleSize <= 1) {
        return mClipImageView.clip();
    }

    // 獲取縮放位移後的矩陣值
    final float[] matrixValues = mClipImageView.getClipMatrixValues();
    final float scale = matrixValues[Matrix.MSCALE_X];
    final float transX = matrixValues[Matrix.MTRANS_X];
    final float transY = matrixValues[Matrix.MTRANS_Y];

    // 獲取在顯示的圖片中裁剪的位置
    final Rect border = mClipImageView.getClipBorder();
    final float cropX = ((-transX + border.left) / scale) * mSampleSize;
    final float cropY = ((-transY + border.top) / scale) * mSampleSize;
    final float cropWidth = (border.width() / scale) * mSampleSize;
    final float cropHeight = (border.height() / scale) * mSampleSize;

    // 獲取在旋轉之前的裁剪位置
    final RectF srcRect = new RectF(cropX, cropY, cropX + cropWidth, cropY + cropHeight);
    final Rect clipRect = getRealRect(srcRect);

    final BitmapFactory.Options ops = new BitmapFactory.Options();
    final Matrix outputMatrix = new Matrix();

    outputMatrix.setRotate(mDegree);
    // 如果裁剪之後的圖片寬高仍然太大,則進行縮小
    if (mMaxWidth > 0 && cropWidth > mMaxWidth) {
        ops.inSampleSize = findBestSample((int) cropWidth, mMaxWidth);

        final float outputScale = mMaxWidth / (cropWidth / ops.inSampleSize);
        outputMatrix.postScale(outputScale, outputScale);
    }

    // 裁剪
    BitmapRegionDecoder decoder = null;
    try {
        decoder = BitmapRegionDecoder.newInstance(mInput, false);
        final Bitmap source = decoder.decodeRegion(clipRect, ops);
        recycleImageViewBitmap();
        return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), outputMatrix, false);
    } catch (Exception e) {
        return mClipImageView.clip();
    } finally {
        if (decoder != null && !decoder.isRecycled()) {
            decoder.recycle();
        }
    }
}
 
開發者ID:msdx,項目名稱:clip-image,代碼行數:50,代碼來源:ClipImageActivity.java

示例12: cropImage

import android.graphics.BitmapRegionDecoder; //導入方法依賴的package包/類
public static Bitmap cropImage(InputStream is, int frameWidth, int frameHeight, int flag) {
    if(is == null || frameWidth < 0 || frameHeight < 0 || (frameWidth >= frameHeight) ) {
        throw new IllegalStateException();
    }
    long startTimeMs = System.currentTimeMillis();
    Bitmap croppedImage = null;
    is.mark(0);

    BitmapFactory.Options boundOption = new BitmapFactory.Options();
    boundOption.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(is, null, boundOption);
    Log.i(TAG, "original width:" + boundOption.outWidth + ", height:" + boundOption.outHeight);

    float frameAspectRatio = (float)frameWidth / frameHeight;
    float imageAspectRatio = (float)boundOption.outWidth / boundOption.outHeight;
    float scaleRate = 0f;
    Rect cropRegion = null;
    int cropWidth = boundOption.outWidth, cropHeight = boundOption.outHeight;
    Log.i(TAG, "frameAspectRatio:" + frameAspectRatio + ", imageAspectRatio:" + imageAspectRatio);
    if(frameAspectRatio >= imageAspectRatio) {
        cropHeight = (int)(boundOption.outWidth / frameAspectRatio);
        cropRegion = new Rect(0, (boundOption.outHeight - cropHeight) / 2, boundOption.outWidth, (boundOption.outHeight + cropHeight) / 2);
    } else {
        cropWidth = (int)(boundOption.outHeight * frameAspectRatio);
        cropRegion = new Rect((boundOption.outWidth - cropWidth) / 2, 0, (boundOption.outWidth + cropWidth) / 2, boundOption.outHeight);
    }
    scaleRate = (float)cropWidth / frameWidth;
    Log.i(TAG, "cropWidth:" + cropWidth + ", cropHeight:" + cropHeight + ", cropRegion:" + cropRegion + ", scaleRate:" + scaleRate);

    BitmapRegionDecoder brd = null;
    try {
        is.reset();
        BitmapFactory.Options imageOption = new BitmapFactory.Options();
        imageOption.inJustDecodeBounds = false;
        imageOption.inPreferQualityOverSpeed = true;
        imageOption.inSampleSize = (int)(scaleRate + 0.5);
        Log.i(TAG, "imageOption.inSampleSize:" + imageOption.inSampleSize);
        brd = BitmapRegionDecoder.newInstance(is, false);
        croppedImage = brd.decodeRegion(cropRegion, imageOption);
    } catch (IOException e) {
        e.printStackTrace();
        Log.e(TAG, e.getMessage());
    } finally {
        if(brd != null) {
            brd.recycle();
        }
    }
    if(croppedImage != null) {
        Log.i(TAG, "croppedImage width:" + croppedImage.getWidth() + ", height:" + croppedImage.getHeight());
    }
    long stopTimeMs = System.currentTimeMillis();
    Log.i(TAG, "cost {" + (stopTimeMs - startTimeMs) + "ms}");
    return croppedImage;
}
 
開發者ID:djfkue,項目名稱:Foto,代碼行數:55,代碼來源:ImageCropper.java


注:本文中的android.graphics.BitmapRegionDecoder.recycle方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。