代号 一张来自互联网的圆形图片
Codename One rounded image from an internet source
我正在尝试显示直接从 Internet 获得的圆形图像。
我使用下面的代码创建了一个圆形遮罩,从 Internet 获取图像,然后尝试在图像或标签本身上设置遮罩。 None 这些方法奏效了。如果我取下面具,图像显示正常。如果我保留设置遮罩的代码,那么我只会看到一个空的白色圆圈。
我的想法是,如果我将蒙版应用于图像本身,那么它可能不会生效,因为在应用蒙版时图像尚未下载。
但我似乎不明白为什么在标签上调用 setMask
也不起作用。
// Create MASK
Image maskImage = Image.createImage(w, l);
Graphics g = maskImage.getGraphics();
g.setAntiAliased(true);
g.setColor(0x000000);
g.fillRect(0, 0, w, l);
g.setColor(0xffffff);
g.fillArc(0, 0, w, l, 0, 360);
Object mask = maskImage.createMask();
// GET IMAGE
com.cloudinary.Cloudinary cloudinary = new com.cloudinary.Cloudinary(ObjectUtils.asMap(
"cloud_name", "REMOVED",
"api_key", "REMOVED",
"api_secret", "REMOVED"));
// Disable private CDN URLs as this doesn't seem to work with free accounts
cloudinary.config.privateCdn = false;
Image placeholder = Image.createImage(150, 150);
EncodedImage encImage = EncodedImage.createFromImage(placeholder, false);
Image img2 = cloudinary.url()
.type("fetch") // Says we are fetching an image
.format("jpg") // We want it to be a jpg
.transformation(
new Transformation()
.radius("max").width(150).height(150).crop("thumb").gravity("faces").image(encImage, "http://upload.wikimedia.org/wikipedia/commons/4/46/Jennifer_Lawrence_at_the_83rd_Academy_Awards.jpg");
Label label = new Label(img2);
label.setMask(mask); // also tried to do img2.applyMask(mask); before passing img2
我认为您为标签设置的制作代码可能与您从 Cloudinary 获得的屏蔽代码冲突。
所以我尝试了各种方法:
1) 删除通过 cloudinary 设置的掩码 - 那没有用
2) 将蒙版应用于占位符和编码图像(正如预期的那样,这些不会影响正在发布的最终版本)
3) 这就是有效的方法!我不确定问题是否真的与应用蒙版之前或之后下载图片有关。时间可以告诉我们
Label label = new Label();
img2.applyMask(mask); // If you remove this line , the image will no longer be displayed, I will only see a rounded white circle ! I am not sure what this is doing, it might be simply stalling the process until the image is downloaded? or maybe somehow calling repaint or revalidate
label.setIcon( img2.applyMask(mask));
如果其他人遇到类似问题,以下是对我有用的方法:
//CREATE MASK
Image maskImage = Image.createImage(w, l);
Graphics g = maskImage.getGraphics();
g.setAntiAliased(true);
g.setColor(0x000000);
g.fillRect(0, 0, w, l);
g.setColor(0xffffff);
g.fillArc(0, 0, w, l, 0, 360);
Object mask = maskImage.createMask();
//CONNECT TO CLOUDINARY
com.cloudinary.Cloudinary cloudinary = new com.cloudinary.Cloudinary(ObjectUtils.asMap(
"cloud_name", "REMOVED",
"api_key", "REMOVED",
"api_secret", "REMOVED"));
// Disable private CDN URLs as this doesn't seem to work with free accounts
cloudinary.config.privateCdn = false;
//CREATE IMAGE PLACEHOLDERS
Image placeholder = Image.createImage(w, l);
EncodedImage encImage = EncodedImage.createFromImage(placeholder, false);
//DOWNLOAD IMAGE
Image img2 = cloudinary.url()
.type("fetch") // Says we are fetching an image
.format("jpg") // We want it to be a jpg
.transformation(
new Transformation()
.crop("thumb").gravity("faces")
.image(encImage, url);
// Add the image to a label and place it on the form.
//GetCircleImage(img2);
Label label = new Label();
img2.applyMask(mask); // If you remove this line , the image will no longer be displayed, I will only see a rounded white circle ! I am not sure what this is doing, it might be simply stalling the process until the image is downloaded? or maybe somehow calling repaint or revalidate
label.setIcon( img2.applyMask(mask));
Shai,非常感谢你抽出时间!!非常感谢你。如果它以后给我任何其他问题,我将不得不深入研究它,但它现在似乎一直有效。
Cloudinary API returns 不能很好地与 Label.setMask() 方法配合使用的 URLImage,因为从技术上讲,URLImage 是一个动画图像(它是一个占位符图片直到加载完成,然后 "animates" 成为目标图片)。
我刚刚发布了一个 new version 的 cloudinary cn1lib,它为您提供了解决此问题的几个选项。
我添加了两个新的 image()
方法。一个采用 ImageAdapter
参数,您可以使用该参数将蒙版应用于图像本身,然后再将其设置为标签的图标。那么你根本不会使用 Label.setMask()。
见javadocs for this method here
另一种方法使用下面的新异步图像加载 APIs 来异步加载图像。您在回调中收到的图像是一张 "real" 图像,因此您可以正常使用它和面具。
见javadocs for this method here
如果您尝试添加 "animated" 图像并屏蔽它以使其更清晰,我们正在考虑向 Label.setMask() 和 setIcon() 方法添加软警告。
我正在尝试显示直接从 Internet 获得的圆形图像。 我使用下面的代码创建了一个圆形遮罩,从 Internet 获取图像,然后尝试在图像或标签本身上设置遮罩。 None 这些方法奏效了。如果我取下面具,图像显示正常。如果我保留设置遮罩的代码,那么我只会看到一个空的白色圆圈。
我的想法是,如果我将蒙版应用于图像本身,那么它可能不会生效,因为在应用蒙版时图像尚未下载。
但我似乎不明白为什么在标签上调用 setMask
也不起作用。
// Create MASK
Image maskImage = Image.createImage(w, l);
Graphics g = maskImage.getGraphics();
g.setAntiAliased(true);
g.setColor(0x000000);
g.fillRect(0, 0, w, l);
g.setColor(0xffffff);
g.fillArc(0, 0, w, l, 0, 360);
Object mask = maskImage.createMask();
// GET IMAGE
com.cloudinary.Cloudinary cloudinary = new com.cloudinary.Cloudinary(ObjectUtils.asMap(
"cloud_name", "REMOVED",
"api_key", "REMOVED",
"api_secret", "REMOVED"));
// Disable private CDN URLs as this doesn't seem to work with free accounts
cloudinary.config.privateCdn = false;
Image placeholder = Image.createImage(150, 150);
EncodedImage encImage = EncodedImage.createFromImage(placeholder, false);
Image img2 = cloudinary.url()
.type("fetch") // Says we are fetching an image
.format("jpg") // We want it to be a jpg
.transformation(
new Transformation()
.radius("max").width(150).height(150).crop("thumb").gravity("faces").image(encImage, "http://upload.wikimedia.org/wikipedia/commons/4/46/Jennifer_Lawrence_at_the_83rd_Academy_Awards.jpg");
Label label = new Label(img2);
label.setMask(mask); // also tried to do img2.applyMask(mask); before passing img2
我认为您为标签设置的制作代码可能与您从 Cloudinary 获得的屏蔽代码冲突。
所以我尝试了各种方法:
1) 删除通过 cloudinary 设置的掩码 - 那没有用
2) 将蒙版应用于占位符和编码图像(正如预期的那样,这些不会影响正在发布的最终版本)
3) 这就是有效的方法!我不确定问题是否真的与应用蒙版之前或之后下载图片有关。时间可以告诉我们
Label label = new Label();
img2.applyMask(mask); // If you remove this line , the image will no longer be displayed, I will only see a rounded white circle ! I am not sure what this is doing, it might be simply stalling the process until the image is downloaded? or maybe somehow calling repaint or revalidate
label.setIcon( img2.applyMask(mask));
如果其他人遇到类似问题,以下是对我有用的方法:
//CREATE MASK
Image maskImage = Image.createImage(w, l);
Graphics g = maskImage.getGraphics();
g.setAntiAliased(true);
g.setColor(0x000000);
g.fillRect(0, 0, w, l);
g.setColor(0xffffff);
g.fillArc(0, 0, w, l, 0, 360);
Object mask = maskImage.createMask();
//CONNECT TO CLOUDINARY
com.cloudinary.Cloudinary cloudinary = new com.cloudinary.Cloudinary(ObjectUtils.asMap(
"cloud_name", "REMOVED",
"api_key", "REMOVED",
"api_secret", "REMOVED"));
// Disable private CDN URLs as this doesn't seem to work with free accounts
cloudinary.config.privateCdn = false;
//CREATE IMAGE PLACEHOLDERS
Image placeholder = Image.createImage(w, l);
EncodedImage encImage = EncodedImage.createFromImage(placeholder, false);
//DOWNLOAD IMAGE
Image img2 = cloudinary.url()
.type("fetch") // Says we are fetching an image
.format("jpg") // We want it to be a jpg
.transformation(
new Transformation()
.crop("thumb").gravity("faces")
.image(encImage, url);
// Add the image to a label and place it on the form.
//GetCircleImage(img2);
Label label = new Label();
img2.applyMask(mask); // If you remove this line , the image will no longer be displayed, I will only see a rounded white circle ! I am not sure what this is doing, it might be simply stalling the process until the image is downloaded? or maybe somehow calling repaint or revalidate
label.setIcon( img2.applyMask(mask));
Shai,非常感谢你抽出时间!!非常感谢你。如果它以后给我任何其他问题,我将不得不深入研究它,但它现在似乎一直有效。
Cloudinary API returns 不能很好地与 Label.setMask() 方法配合使用的 URLImage,因为从技术上讲,URLImage 是一个动画图像(它是一个占位符图片直到加载完成,然后 "animates" 成为目标图片)。
我刚刚发布了一个 new version 的 cloudinary cn1lib,它为您提供了解决此问题的几个选项。
我添加了两个新的 image()
方法。一个采用 ImageAdapter
参数,您可以使用该参数将蒙版应用于图像本身,然后再将其设置为标签的图标。那么你根本不会使用 Label.setMask()。
见javadocs for this method here
另一种方法使用下面的新异步图像加载 APIs 来异步加载图像。您在回调中收到的图像是一张 "real" 图像,因此您可以正常使用它和面具。
见javadocs for this method here
如果您尝试添加 "animated" 图像并屏蔽它以使其更清晰,我们正在考虑向 Label.setMask() 和 setIcon() 方法添加软警告。