当前位置: 首页 > 知识库问答 >
问题:

Android如何创建运行时缩略图

公良信然
2023-03-14

我有一个大尺寸的图像。在运行时,我想从存储器中读取图像,并对其进行缩放,以减少其重量和大小,并将其用作缩略图。当用户单击缩略图时,我想显示全尺寸的图像。

共有3个答案

施雅懿
2023-03-14

我找到的最佳解决方案如下。与其他解决方案相比,此解决方案不需要加载完整图像来创建缩略图,因此效率更高!它的限制是,你不能有一个精确的宽度和高度缩略图,但解决方案尽可能接近。

File file = ...; // the image file

Options bitmapOptions = new Options();
bitmapOptions.inJustDecodeBounds = true; // obtain the size of the image, without loading it in memory
BitmapFactory.decodeFile(file.getAbsolutePath(), bitmapOptions);

// find the best scaling factor for the desired dimensions
int desiredWidth = 400;
int desiredHeight = 300;
float widthScale = (float)bitmapOptions.outWidth/desiredWidth;
float heightScale = (float)bitmapOptions.outHeight/desiredHeight;
float scale = Math.min(widthScale, heightScale);

int sampleSize = 1;
while (sampleSize < scale) {
    sampleSize *= 2;
}
bitmapOptions.inSampleSize = sampleSize; // this value must be a power of 2,
                                         // this is why you can not have an image scaled as you would like
bitmapOptions.inJustDecodeBounds = false; // now we want to load the image

// Let's load just the part of the image necessary for creating the thumbnail, not the whole image
Bitmap thumbnail = BitmapFactory.decodeFile(file.getAbsolutePath(), bitmapOptions);

// Save the thumbnail
File thumbnailFile = ...;
FileOutputStream fos = new FileOutputStream(thumbnailFile);
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, fos);
fos.flush();
fos.close();

// Use the thumbail on an ImageView or recycle it!
thumbnail.recycle();
万俟渊
2023-03-14

我的解决方案

byte[] imageData = null;

        try     
        {

            final int THUMBNAIL_SIZE = 64;

            FileInputStream fis = new FileInputStream(fileName);
            Bitmap imageBitmap = BitmapFactory.decodeStream(fis);

            imageBitmap = Bitmap.createScaledBitmap(imageBitmap, THUMBNAIL_SIZE, THUMBNAIL_SIZE, false);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            imageData = baos.toByteArray();

        }
        catch(Exception ex) {

        }
翟博雅
2023-03-14

试试这个

Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath), THUMBSIZE, THUMBSIZE);

此实用程序可从API_LEVEl 8获得。[来源]

 类似资料:
  • 我试图根据用户输入动态创建一个单声道序列。我正在调用rest API并在Mono中获得ClientResponse。我的用例是在一个序列中调用2个或多个API,下一个API的输入负载取决于前一个API的输出。 我的硬编码序列操作看起来像 这是很好的工作,但我想让这个方法通用。我想从用户的POJO列表中获取所有必需的参数,并基于列表输入创建flatMap序列。因此,如果列表的长度为2,则将有2个平面

  • 问题内容: 我正在寻找一个Java库,该库可以获取PDF并从第一页创建缩略​​图(PNG)。 我已经看过JPedal了,但是它疯狂的许可费完全让人望而却步。目前,我正在使用iText处理PDF文件,但我相信它不会生成缩略图。我可以在命令行上使用类似Ghostscript之类的东西,但我希望尽可能将我的项目保留为全Java。 问题答案: PDF Renderer 是LGPL许可的纯Java库,它使此

  • 我需要创建,让我们说,12缩略图从视频,但跳过10%在开始和结束。我找到了这个东西,但它只是每1000帧拍一次。在我的情况下,这个范围将是可变的,如果它将在秒内更好。不知道如何使用ffmpeg来实现这一点,不要使用它太多。

  • 本文向大家介绍C#使用GDI+创建缩略图实例,包括了C#使用GDI+创建缩略图实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用GDI+创建缩略图的方法,分享给大家供大家参考。具体方法分析如下: C#的Gdi+还是相当好用的。创建缩略图步骤如下: 1. Image保存图像,需要一个CLSID的参数,它可以这样获得: 2. Image::Save的另外一个参数EncoderPara

  • 本文向大家介绍ASP.NET创建动态缩略图的方法,包括了ASP.NET创建动态缩略图的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET创建动态缩略图的方法。分享给大家供大家参考。具体分析如下: 提示: 1. 导入 System.IO 2. 创建 类C lass "CreateThumbnails" or any class and place following func