Java 类com.facebook.imagepipeline.animated.base.AnimatedImageFrame 实例源码
项目:GitHub
文件:AnimatedDrawableBackendImpl.java
private void renderImageSupportsScaling(Canvas canvas, AnimatedImageFrame frame) {
double xScale = (double) mRenderedBounds.width() / (double) mAnimatedImage.getWidth();
double yScale = (double) mRenderedBounds.height() / (double) mAnimatedImage.getHeight();
int frameWidth = (int) Math.round(frame.getWidth() * xScale);
int frameHeight = (int) Math.round(frame.getHeight() * yScale);
int xOffset = (int) (frame.getXOffset() * xScale);
int yOffset = (int) (frame.getYOffset() * yScale);
synchronized (this) {
prepareTempBitmapForThisSize(mRenderedBounds.width(), mRenderedBounds.height());
frame.renderFrame(frameWidth, frameHeight, mTempBitmap);
// Temporary bitmap can be bigger than frame, so we should draw only rendered area of bitmap
mRenderSrcRect.set(0, 0, mRenderedBounds.width(), mRenderedBounds.height());
mRenderDstRect.set(xOffset, yOffset, mRenderedBounds.width(), mRenderedBounds.height());
canvas.drawBitmap(mTempBitmap, mRenderSrcRect, mRenderDstRect, null);
}
}
项目:GitHub
文件:AnimatedDrawableBackendImpl.java
private void renderImageDoesNotSupportScaling(Canvas canvas, AnimatedImageFrame frame) {
int frameWidth = frame.getWidth();
int frameHeight = frame.getHeight();
int xOffset = frame.getXOffset();
int yOffset = frame.getYOffset();
synchronized (this) {
prepareTempBitmapForThisSize(frameWidth, frameHeight);
frame.renderFrame(frameWidth, frameHeight, mTempBitmap);
// Temporary bitmap can be bigger than frame, so we should draw only rendered area of bitmap
mRenderSrcRect.set(0, 0, frameWidth, frameHeight);
mRenderDstRect.set(0, 0, frameWidth, frameHeight);
float xScale = (float) mRenderedBounds.width() / (float) mAnimatedImage.getWidth();
float yScale = (float) mRenderedBounds.height() / (float) mAnimatedImage.getHeight();
canvas.save();
canvas.scale(xScale, yScale);
canvas.translate(xOffset, yOffset);
canvas.drawBitmap(mTempBitmap, mRenderSrcRect, mRenderDstRect, null);
canvas.restore();
}
}
项目:fresco
文件:AnimatedDrawableBackendImpl.java
private void renderImageSupportsScaling(Canvas canvas, AnimatedImageFrame frame) {
double xScale = (double) mRenderedBounds.width() / (double) mAnimatedImage.getWidth();
double yScale = (double) mRenderedBounds.height() / (double) mAnimatedImage.getHeight();
int frameWidth = (int) Math.round(frame.getWidth() * xScale);
int frameHeight = (int) Math.round(frame.getHeight() * yScale);
int xOffset = (int) (frame.getXOffset() * xScale);
int yOffset = (int) (frame.getYOffset() * yScale);
synchronized (this) {
int renderedWidth = mRenderedBounds.width();
int renderedHeight = mRenderedBounds.height();
// Update the temp bitmap to be >= rendered dimensions
prepareTempBitmapForThisSize(renderedWidth, renderedHeight);
frame.renderFrame(frameWidth, frameHeight, mTempBitmap);
// Temporary bitmap can be bigger than frame, so we should draw only rendered area of bitmap
mRenderSrcRect.set(0, 0, renderedWidth, renderedHeight);
mRenderDstRect.set(xOffset, yOffset, xOffset + renderedWidth, yOffset + renderedHeight);
canvas.drawBitmap(mTempBitmap, mRenderSrcRect, mRenderDstRect, null);
}
}
项目:fresco
文件:AnimatedDrawableBackendImpl.java
private void renderImageDoesNotSupportScaling(Canvas canvas, AnimatedImageFrame frame) {
int frameWidth = frame.getWidth();
int frameHeight = frame.getHeight();
int xOffset = frame.getXOffset();
int yOffset = frame.getYOffset();
synchronized (this) {
prepareTempBitmapForThisSize(frameWidth, frameHeight);
frame.renderFrame(frameWidth, frameHeight, mTempBitmap);
// Temporary bitmap can be bigger than frame, so we should draw only rendered area of bitmap
mRenderSrcRect.set(0, 0, frameWidth, frameHeight);
mRenderDstRect.set(0, 0, frameWidth, frameHeight);
float xScale = (float) mRenderedBounds.width() / (float) mAnimatedImage.getWidth();
float yScale = (float) mRenderedBounds.height() / (float) mAnimatedImage.getHeight();
canvas.save();
canvas.scale(xScale, yScale);
canvas.translate(xOffset, yOffset);
canvas.drawBitmap(mTempBitmap, mRenderSrcRect, mRenderDstRect, null);
canvas.restore();
}
}
项目:GitHub
文件:AnimatedDrawableBackendImpl.java
@Override
public void renderFrame(int frameNumber, Canvas canvas) {
AnimatedImageFrame frame = mAnimatedImage.getFrame(frameNumber);
try {
if (mAnimatedImage.doesRenderSupportScaling()) {
renderImageSupportsScaling(canvas, frame);
} else {
renderImageDoesNotSupportScaling(canvas, frame);
}
} finally {
frame.dispose();
}
}
项目:fresco
文件:AnimatedDrawableBackendImpl.java
@Override
public void renderFrame(int frameNumber, Canvas canvas) {
AnimatedImageFrame frame = mAnimatedImage.getFrame(frameNumber);
try {
if (mAnimatedImage.doesRenderSupportScaling()) {
renderImageSupportsScaling(canvas, frame);
} else {
renderImageDoesNotSupportScaling(canvas, frame);
}
} finally {
frame.dispose();
}
}