图像编码开发
场景介绍
图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。
接口说明
ImagePacker主要用于图像编码。
开发步骤
1. 创建图像编码ImagePacker对象
ImagePacker imagePacker = ImagePacker.create();
2. 设置编码输出流和编码参数。设置format为编码的图像格式,当前支持jpeg格式。设置quality为图像质量,范围从0-100,100为最佳质量
// 传入本地图片路径,图片格式需要与packingOptions.format相对应 FileOutputStream outputStream = null; try { outputStream = new FileOutputStream("/path/to/packed.file"); } catch (FileNotFoundException e) { e.printStackTrace(); } ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions(); packingOptions.format = "image/jpeg"; packingOptions.quality = 90; boolean result = imagePacker.initializePacking(outputStream, packingOptions);
3. 添加需要编码的PixelMap对象,进行编码操作
result = imagePacker.addImage(pixelMap); long dataSize = imagePacker.finalizePacking();
4. 编码输出完成后,可以进行后续处理,比如保存、传输等。
5. 释放创建的ImagePacker
imagePacker.release();
位图操作开发
场景介绍
位图操作就是指对PixelMap图像进行相关的操作,比如创建、查询信息、读写像素数据等。
接口说明
开发步骤
1. 创建位图对象PixelMap
// 从像素颜色数组创建 int[] defaultColors = new int[] {5, 5, 5, 5, 6, 6, 3, 3, 3, 0}; PixelMap.InitializationOptions initializationOptions = new PixelMap.InitializationOptions(); initializationOptions.size = new Size(3, 2); initializationOptions.pixelFormat = PixelFormat.ARGB_8888; initializationOptions.editable = true; PixelMap pixelMap = PixelMap.create(defaultColors, initializationOptions); // 指定初始化选项创建 PixelMap pixelMap2 = PixelMap.create(initializationOptions); // 以另外一个PixelMap作为数据源创建 PixelMap pixelMap3 = PixelMap.create(pixelMap2, initializationOptions);
2. 从位图对象中获取信息
long capacity = pixelMap.getPixelBytesCapacity(); long bytesNumber = pixelMap.getPixelBytesNumber(); int rowBytes = pixelMap.getBytesNumberPerRow(); byte[] ninePatchData = pixelMap.getNinePatchChunk();
3. 读写位图像素数据。
// 读取指定位置像素 int color = pixelMap.readPixel(new Position(1, 1)); // 读取指定区域像素 int[] pixelArray = new int[50]; Rect region = new Rect(0, 0, 2, 2); pixelMap.readPixels(pixelArray, 0, 10, region); // 读取像素到Buffer IntBuffer pixelBuf = IntBuffer.allocate(50); pixelMap.readPixels(pixelBuf); // 在指定位置写入像素 pixelMap.writePixel(new Position(1, 1), 0xFF112233); // 在指定区域写入像素 pixelMap.writePixels(pixelArray, 0, 10, region); // 写入Buffer中的像素 pixelMap.writePixels(pixelBuf);
图像属性解码开发
场景介绍
图像属性解码就是获取图像中包含的属性信息,比如EXIF属性。
接口说明
图像属性解码的功能主要由ImageSource和ExifUtils提供。
ImageSource的主要接口
ExifUtils的主要接口
开发步骤
1. 创建图像数据源ImageSource对象,可以通过SourceOptions指定数据源的格式信息,此格式信息仅为给解码器的提示,正确提供能帮助提高解码效率,如果不设置或设置不正确,会自动检测正确的图像格式。
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions(); srcOpts.formatHint = "image/jpeg"; // 此处传入用户自定义的带缩略图的图像路径 String pathName = "/sdcard/image.jpg"; ImageSource imageSource = ImageSource.create(pathName, srcOpts);
2. 获取缩略图信息
int format = imageSource.getThumbnailFormat(); byte[] thumbnailBytes = imageSource.getImageThumbnailBytes(); // 将缩略图解码为PixelMap对象 ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions(); PixelMap thumbnailPixelmap = imageSource.createThumbnailPixelmap(decodingOpts, false);