VectorDrawable 图像变得像素化

Posted

技术标签:

【中文标题】VectorDrawable 图像变得像素化【英文标题】:VectorDrawable image becomes pixelated 【发布时间】:2016-09-13 06:03:55 【问题描述】:

我使用了几个图像,这些图像是使用 android Studio 的 Vector Asset Studio 通过本地 SVG 文件导入的。

图像在我的 nexus 6p 上完美加载,然而,在索尼 Xperia Z 上,它非常像素化,在三星 Galaxy s2 上,它更糟糕。

据我了解,由于该文件是 xml(矢量)而不是 png 文件,它应该能够自动调整大小,或者我错过了什么。

我附上了这 3 个案例的图片。

编辑:只是一些额外的信息:该文件最初是 PNG,但是,我已经使用名为 Vector Magic 的程序完全转换为矢量文件。我可以在 illustrator 上打开它并编辑每一行等。

解决方法通过 VectorDrawableCompat.create(..) 方法将 VectorDrawable 更改为 VectorDrawableCompat。谢谢@pskink。

【问题讨论】:

而且...是的,已确认。该工具从原始 SVG 文件生成位图:Android 4.4 (API level 20) and lower doesn't support vector drawables. If your minimum API level is set at one of these API levels, you have two options when using Vector Asset Studio: generate Portable Network Graphic (PNG) files (the default) or use the Support Library. For backward-compatibility, Vector Asset Studio generates raster images of the vector drawable 供您参考:developer.android.com/studio/write/vector-asset-studio.html 检查this是否有帮助 @BobMalooga 感谢您的链接,非常有用。但是,xperia Z 是在 Android 5.0.2 上,所以它应该支持矢量绘图,因此不应该是模糊的。 是的,它支持... VectorDrawables。但是如果你给它Bitmaps,它就会使用Bitmaps。 所以使用VectorDrawableCompat 因为VectorDrawable 在v5 设备上已损坏 【参考方案1】:

android:scaleType="fitXY" 添加到图像中解决了我的问题。

【讨论】:

它实际上适用于我尝试过的大多数 scaleTypes。 我用过 android:scaleType="centerInside" 并解决了这个问题【参考方案2】:

Android 在 API 级别 21 及更高级别上支持 SVG。对于 API 级别 19、20,它回退到 png 生成。我们在应用程序中放入的 SVG 对于这几代人来说尺寸较小,因此您的屏幕上似乎会出现像素化图像。就我而言,增加

<vector android: android:

矢量 XML 生成更好的 png,并且在旧设备上开始看起来更好

【讨论】:

这是一个很好的答案!非常感谢【参考方案3】:

对我来说,导致矢量转换为 png 的原因是我的矢量可绘制对象中的 android:fillType="evenodd" 属性。当我删除了我的drawable中所有出现的这个属性(因此矢量使用默认的nonzero填充类型),下次构建应用程序时一切都很好。

【讨论】:

以上是关于VectorDrawable 图像变得像素化的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV转为灰度图像 & 访问像素方法

图像灰度化、二值化理解

OpenCV 读写图像读写像素修改像素值(案例:图像反处理)

OpenCV 读写图像读写像素修改像素值(案例:图像反处理)

Android:将 SVG 转换为 VectorDrawable

opencv4opencv视频教程 C++ 5读写图像imreadimwrite读写像素at<>()修改像素值ROI区域选择(图像裁剪)RectVec3b与Vec3FCV_32F)