gpt4 book ai didi

android - 在处理 Android 模式时 svgs 的 loadShape 失败

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:02 24 4
gpt4 key购买 nike

我正在为 android 开发一个动态壁纸应用程序。

当我将 loadShape 与某些 SVG 一起使用时,它无法在 Android 模式下正确呈现。但它在 java 模式下正确呈现。

这是一个这样的svg kiwi.svg .它被渲染成 this .

但是this svg 正在正确 呈现。 Download orange.svg

我整理了这段简单的代码来演示我的意思。

PShape svg;
int num = 1;

String[] assets = {
"tomato.svg", "ogears.svg", "watermelon.svg", "kiwi.svg"
};

void settings() {
size(displayWidth, displayHeight, P3D);
}

void setup(){
svg = loadShape(assets[num]);
}

void draw(){
background(255);
push();
translate(svg.width/2, svg.height/2);
scale(map(mouseY, 0, height, 0, 1));
translate(-svg.width/2, -svg.height/2);
ellipse(displayWidth/2, displayHeight/2, 200, 200);
//translate(displayWidth/2, displayHeight/2);
shape(svg);

push();
noFill();
stroke(0);
strokeWeight(10);
rect(0, 0, svg.width, svg.height);
pop();

pop();
}

void push(){
pushMatrix();
pushStyle();
}

void pop(){
popStyle();
popMatrix();
}

void mousePressed(){
num++;
num = num % 4;
svg = loadShape(assets[num]);
}

可以在此处找到 Assets 和完整代码。 SVGTests.zip

即使我使用像 size(.., .., P2D) 这样的 P2D 渲染器,它也 工作。

我猜我的 svg 与 processing-android 不兼容。

当我使用 this 时svg 我得到 ArrayIndexOutOfBoundsException: 145 草图消失了。 Download-it

所以我的问题是我是否应该将我所有的 loadShape 用法替换为 loadImage 并将我所有的 svg 转换为 png 格式而不是处理这个?

最佳答案

回答我的问题:

所以我注意到这两个 svg 之间的区别 the working onethe distorted one .

区别是

  1. 工作的 svg 只有 <path>其中的元素。
  2. 非工作 svg 有 <path><circle>元素。

Android 模式渲染器无法渲染 <circle> svg 标签正确。

这就是它呈现 svg 的方式。

kiwi

需要注意的是,只有圆圈变形了(而不是它们应该在的地方)。

所以我尝试将所有形状转换为 <path>使用 Inkscape。它似乎正在工作,因为渲染器可以渲染 <path>正确标记。

实现步骤:

  • 在 Inkscape 中打开 svg。如果需要,请备份旧版本,这是不可逆的。
  • CTRL+A 选择整个svg
  • Path > Object To Path CTRL+SHIFT+C
  • 立即保存文件。
  • 使用新文件重试。

性能:

我还观察到 loadShape 所花费的时间转换所有 circles 后显着增加至 paths在 java 和 android 模式下。

Java 渲染器(Windows 10 电脑)

name: kiwi-paths size: 917.71655 917.71655
time: 178.0 ms
name: kiwi-original size: 917.71655 917.71655
time: 74.0 ms

Android 渲染器(Android 7.0 Redmi note 4)

name: kiwi-paths size: 917.71655 917.71655
time: 190.0 ms
name: kiwi-original size: 917.71655 917.71655
time: 100.0 ms

因此,如果在 PC 上运行,最好有路径但有原始形状。

我还提交了 issue在 processing-android github 仓库中。

关于android - 在处理 Android 模式时 svgs 的 loadShape 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57145711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com