【.9.img】Android设计中的.9.png

本文深入探讨了.9.png图片式的具体用法,包括其与普通.png资源的区别、如何标注拉伸区域与内容区域,以及如何输出.9.png资源。通过实例演示,帮助开发者正确运用.9.png进行UI设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


cover3

在Android的设计过程中,为了适配不同的手机分辨率,图片大多需要拉伸或者压缩,这样就出现了可以任意调整大小的一种图片格式“.9.png”。这种图片是用于Android开发的一种特殊的图片格式,它的好处在于可以用简单的方式把一张图片中哪些区域可以拉伸,哪些区域不可以拉伸设定好,同时可以把显示内容区域的位置标示清楚。
本文结合一些具体的例子来看下.9.png的具体用法。

首先看下普通的.png资源与.9.png的资源区别:
Android设计中的.9.png

普通的png资源就不多介绍了,可以明显看到.9.png的外围是有一些黑色的线条的,那这些线条是用来做什么的呢?我们来看下放大的图像:
Android设计中的.9.png

放大后可以比较明显的看到上下左右分别有一个像素的黑色线段,这里分别标注了序号。简单来说,序号1和2标识了可以拉伸的区域,序号3和4标识了内容区域。当设定了按钮实际应用的宽和高之后,横向会拉伸1区域的像素,纵向会拉伸2区域的像素。如下图:
Android设计中的.9.png

拉伸的含义应该比较容易理解,但是内容区域的标注有什么意义呢?我们来看下图:
Android设计中的.9.png

这里程序设置的文字垂直居中,水平居左的对齐方式。对齐方式是没有问题的,但是对于这种大圆角同时又有些不规则边框的的图形来说,错误的标注方式会让排版看起来很混乱。所以我们需要修正内容区域的线段位置和长度。
Android设计中的.9.png
把横向的内容区域缩短到圆角以内,纵向的内容区域控制在输入框的高度以内,这样文字就可以正常显示了。

这里还有一种特殊情况,就是本身是.9.png的资源,但是在修改过程中你希望这张.9.png不能被拉伸(在做皮肤的情况中有可能会遇到),那怎么办呢?只要把拉伸区域的点点在透明像素的地方就可以了,这样拉伸的时候会拉伸透明部分的像素,而不会拉伸图像本身。如下图:
Android设计中的.9.png
大家可以看到拉伸区域的黑点是可以不连续的。

说了半天.9.png的用法,那.9.png如何输出呢?有很多种方式可以输出.9.png,比如说用draw9patch.bat这个工具,或者简单一点,用photoshop直接输出。输出的方式是先输出普通的png资源,然后扩大画布大小,上下左右各空出一个像素,再用一个像素的铅笔工具(颜色选择纯黑色),上下左右分别画点就可以了,保存的时候注意把后缀修改为.9.png。
有两点需要特别注意下:
1.最外围的一圈像素必须要么是纯黑色,要么是透明,一点点的半透明的像素都不可以有,比如说99%的黑色或者是1%的投影都不可以有;
2.文件的后缀名必须是.9.png,不能是.png或者是.9.png.png,这样的命名都会导致编译失败。

感谢你的阅读,本文由 腾讯ISUX 版权所有,转载时请注明出处,违者必究,谢谢你的合作。
注明出处格式:腾讯ISUX (http://isux.tencent.com/android-ui-9-png.html)

<think>好的,用户想加载并处理图像文件,特别是名为&#39;score_distribution.png&#39;的文件。需要根据不同的编程语言给出方法。首先,我得考虑常见的语言,比如Python、Java、JavaScript、C#等。Python的话,常用的库有PIL/Pillow和OpenCV。Java可能需要使用BufferedImage或者Android相关的方法,但用户之前提到过Android的外部存储目录,可能是在Android环境下?不过问题没有明确说明,所以应该涵盖通用情况。用户提供的引用中有关于Android外部存储的代码示例,引用1中的getExternalFilesDir方法,这可能与Android应用中的文件存储有关。因此,在回答时需要包括Android平台的处理方法。此外,引用3提到了Python环境下使用OpenCV和TensorRT,所以Python部分可以引用OpenCV和Pillow库。 接下来,需要确保每个步骤的代码示例正确,并且注意文件路径的处理。比如在Android中,需要获取正确的目录,并且检查文件是否存在。在Python中,使用Pillow的Image.open或者cv2.imread读取图片。同时,要提到异常处理,比如文件不存在时的错误捕捉。 用户的问题可能涉及显示图像,所以需要说明如何在不同环境中显示,比如Python中使用matplotlib,Android中使用ImageView,JavaScript在网页中用img标签或Canvas。还要注意不同平台下的权限问题,比如Android需要读取存储权限,而Web中可能需要处理跨域或服务器访问。 需要检查每个代码示例是否正确,比如Java中的File和BitmapFactory用法是否正确,Android的权限声明是否提到。另外,引用中的内容需要适当引用,比如在Android部分引用到站内引用1的方法,但用户提供的引用1是关于保存私有文件,而问题中用户可能是在读取,可能需要调整说明,比如使用getExternalFilesDir来获取私有目录下的文件路径。最后,生成相关问题,要围绕图像处理的其他步骤,比如保存、调整大小、格式转换、异常处理、性能优化等。确保问题覆盖用户可能感兴趣的后续步骤。</think>### 如何加载并处理图像文件(以 `score_distribution.png` 为例) #### 1. **Python 环境** - **使用 Pillow 库** 安装 Pillow:`pip install Pillow` 加载图像并转换为数组: ```python from PIL import Image import numpy as np try: img = Image.open("score_distribution.png") img_array = np.array(img) # 转换为 NumPy 数组便于处理 img.show() # 显示图像 except FileNotFoundError: print("文件未找到") ``` - **使用 OpenCV** 安装 OpenCV:`pip install opencv-python` 读取图像(默认格式为 BGR): ```python import cv2 img = cv2.imread("score_distribution.png") if img is not None: cv2.imshow("Image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` #### 2. **Java 环境** - **桌面应用(BufferedImage)** 使用 `ImageIO` 读取文件: ```java import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; try { BufferedImage img = ImageIO.read(new File("score_distribution.png")); // 处理图像像素 } catch (IOException e) { e.printStackTrace(); } ``` - **Android 平台** 若文件位于外部存储私有目录(如应用专属目录)[^1]: ```java File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "score_distribution.png"); Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); // 显示到 ImageView imageView.setImageBitmap(bitmap); ``` 需添加权限:`<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />` #### 3. **JavaScript(Web 环境)** - **通过 `<img>` 标签加载** ```html <img src="score_distribution.png" id="scoreImage"> <script> const img = document.getElementById("scoreImage"); img.onload = () => { // 使用 Canvas 处理图像 const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); }; </script> ``` - **Node.js 服务端** 使用 `sharp` 库处理: ```bash npm install sharp ``` ```javascript const sharp = require("sharp"); sharp("score_distribution.png") .resize(800, 600) .toFile("processed_image.png"); ``` #### 4. **C#(.NET 环境)** - **使用 System.Drawing** ```csharp using System.Drawing; try { Bitmap img = new Bitmap("score_distribution.png"); // 处理图像 } catch (ArgumentException) { Console.WriteLine("文件路径无效或格式不支持"); } ``` --- ### 关键注意事项 1. **文件路径** - 相对路径需基于当前工作目录,绝对路径更可靠。 - Android 中需通过 `Context` 获取私有目录路径[^1]。 2. **异常处理** 捕获 `FileNotFound` 或权限错误(如 Android 动态权限申请)。 3. **性能优化** 大图像可压缩或分块加载(如 OpenCV 的 `imread` 支持按比例读取)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值