com.bumptech.glide.gifdecoder.GifDecoder# getFrameCount ( ) 源码实例Demo

下面列出了com.bumptech.glide.gifdecoder.GifDecoder# getFrameCount ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: giffun   文件: GifResourceEncoder.java

@Override
public boolean encode(Resource<GifDrawable> resource, OutputStream os) {
    long startTime = LogTime.getLogTime();

    GifDrawable drawable = resource.get();
    Transformation<Bitmap> transformation = drawable.getFrameTransformation();
    if (transformation instanceof UnitTransformation) {
        return writeDataDirect(drawable.getData(), os);
    }

    GifDecoder decoder = decodeHeaders(drawable.getData());

    AnimatedGifEncoder encoder = factory.buildEncoder();
    if (!encoder.start(os)) {
        return false;
    }

    for (int i = 0; i < decoder.getFrameCount(); i++) {
        Bitmap currentFrame = decoder.getNextFrame();
        Resource<Bitmap> transformedResource = getTransformedFrame(currentFrame, transformation, drawable);
        try {
            if (!encoder.addFrame(transformedResource.get())) {
                return false;
            }
            int currentFrameIndex = decoder.getCurrentFrameIndex();
            int delay = decoder.getDelay(currentFrameIndex);
            encoder.setDelay(delay);

            decoder.advance();
        } finally {
            transformedResource.recycle();
        }
    }

    boolean result = encoder.finish();

    if (Log.isLoggable(TAG, Log.VERBOSE)) {
        Log.v(TAG, "Encoded gif with " + decoder.getFrameCount() + " frames and " + drawable.getData().length
                + " bytes in " + LogTime.getElapsedMillis(startTime) + " ms");
    }

    return result;
}
 
源代码2 项目: LiTr   文件: TransformationUtil.java

@Nullable
public static GlFilter createGlFilter(@NonNull Context context,
                                      @NonNull Uri overlayUri,
                                      @NonNull PointF size,
                                      @NonNull PointF position,
                                      float rotation) {
    GlFilter filter = null;

    try {
        if (TextUtils.equals(context.getContentResolver().getType(overlayUri), "image/gif")) {
            ContentResolver contentResolver = context.getApplicationContext().getContentResolver();
            InputStream inputStream = contentResolver.openInputStream(overlayUri);
            BitmapPool bitmapPool = new LruBitmapPool(10);
            GifBitmapProvider gifBitmapProvider = new GifBitmapProvider(bitmapPool);
            final GifDecoder gifDecoder = new StandardGifDecoder(gifBitmapProvider);
            gifDecoder.read(inputStream, (int) TranscoderUtils.getSize(context, overlayUri));

            AnimationFrameProvider animationFrameProvider = new AnimationFrameProvider() {
                @Override
                public int getFrameCount() {
                    return gifDecoder.getFrameCount();
                }

                @Nullable
                @Override
                public Bitmap getNextFrame() {
                    return gifDecoder.getNextFrame();
                }

                @Override
                public long getNextFrameDurationNs() {
                    return TimeUnit.MILLISECONDS.toNanos(gifDecoder.getNextDelay());
                }

                @Override
                public void advance() {
                    gifDecoder.advance();
                }
            };
            filter = new FrameSequenceAnimationOverlayFilter(animationFrameProvider, size, position, rotation);
        } else {
            filter = new BitmapOverlayFilter(context.getApplicationContext(), overlayUri, size, position, rotation);
        }
    } catch (IOException ex) {
        Log.e(TAG, "Failed to create a GlFilter", ex);
    }

    return filter;
}