Android 直接从湿壁画中获取中心裁剪图像';s管道

Android 直接从湿壁画中获取中心裁剪图像';s管道,android,crop,fresco,Android,Crop,Fresco,图像库是否支持直接在管道中中心裁剪位图 库已经支持该控件,方式与标准ImageView属性类似。然而,这些只是渲染变换,不会改变图像本身 在我的例子中,我需要使用检索到的位图(根本不使用SimpleDraweView)。我要求这一个在获得时已经是中心裁剪的 我知道我可以在检索后自己裁剪它并将结果缓存到库中,但这需要创建管道位图的副本。问题是库是否已经内置了这样的功能以避免额外的分配 解码仅上下缩放图像,即使设置相同的宽度和高度也是如此。而且还有一个选项,不幸的是,这是在没有可能改变位图度量的情况

图像库是否支持直接在管道中中心裁剪位图

库已经支持该控件,方式与标准ImageView属性类似。然而,这些只是渲染变换,不会改变图像本身

在我的例子中,我需要使用检索到的位图(根本不使用SimpleDraweView)。我要求这一个在获得时已经是中心裁剪的

我知道我可以在检索后自己裁剪它并将结果缓存到库中,但这需要创建管道位图的副本。问题是库是否已经内置了这样的功能以避免额外的分配

解码仅上下缩放图像,即使设置相同的宽度和高度也是如此。而且还有一个选项,不幸的是,这是在没有可能改变位图度量的情况下实现的

void execute(@NonNull final Context context, @NonNull final Uri uri,
             final int maxSize) throws Throwable
{
    final ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
            .setImageDecodeOptions(ImageDecodeOptions.newBuilder().setForceStaticImage(true).build())
            .setResizeOptions(new ResizeOptions(maxSize, maxSize))
            .build();

    final DataSource<CloseableReference<CloseableImage>> dataSource = Fresco.getImagePipeline()
            .fetchDecodedImage(request, context);

    try (final CloseableReference<CloseableImage> result = DataSources.waitForFinalResult(dataSource))
    {
        if (result != null)
        {
            final CloseableImage image = result.get();

            final Bitmap pipelineBitmap = ((CloseableBitmap)image).getUnderlyingBitmap();

            // Expected to be already center-cropped at this point
            // ....
        }
    }
    finally
    {
        dataSource.close();
    }
}
void execute(@NonNull final Context,@NonNull final Uri,
最终整数(maxSize)抛出可丢弃
{
最终ImageRequest请求=ImageRequestBuilder.newBuilderWithSource(uri)
.setImageDecodeOptions(ImageDecodeOptions.newBuilder().setForceStaticImage(true.build())
.setResizeOptions(新的ResizeOptions(maxSize,maxSize))
.build();
最终数据源DataSource=Fresco.getImagePipeline()
.fetchDecodedImage(请求、上下文);
try(final CloseableReference result=DataSources.waitForFinalResult(dataSource))
{
如果(结果!=null)
{
最终CloseableImage=result.get();
最终位图pipelineBitmap=((CloseableBitmap)image.GetUnderlineingBitmap();
//预计此时已进行中心裁剪
// ....
}
}
最后
{
dataSource.close();
}
}