Codenameone 使用特定大小的图像时,RoundMask会出现异常

Codenameone 使用特定大小的图像时,RoundMask会出现异常,codenameone,Codenameone,我这里有一个很有趣的问题。使用圆形面罩时,它工作正常,但我发现我的设备有问题。所以我检查了模拟器(iOS 6),发现如果我使用480*480或485*485大小的图像,就会出现“掩码和图像大小不匹配”的错误。我把尺寸改为470*470和500*500,效果非常好。而且480*475也很好用。带有特定尺寸的方形img给出误差,例如:694*694、690*690给出误差。模拟器的显示宽度在输出中显示为750 System.out.println("width " + Display.getInst

我这里有一个很有趣的问题。使用圆形面罩时,它工作正常,但我发现我的设备有问题。所以我检查了模拟器(iOS 6),发现如果我使用480*480或485*485大小的图像,就会出现“掩码和图像大小不匹配”的错误。我把尺寸改为470*470和500*500,效果非常好。而且480*475也很好用。带有特定尺寸的方形img给出误差,例如:694*694、690*690给出误差。模拟器的显示宽度在输出中显示为750

System.out.println("width " + Display.getInstance().getDisplayWidth()); //output = 750
if (profile_img != null && !"".equals(profile_img)) {
    Image roundMask = Image.createImage(placeholderForProfile.getWidth(), placeholderForProfile.getHeight(), 0xff000000);
    roundMask = roundMask.scaledWidth(screenWidth / 3);
    Graphics gr = roundMask.getGraphics();
    gr.setColor(0xffffff);
    gr.fillArc(0, 0, placeholderForProfile.getWidth(), placeholderForProfile.getHeight(), 0, 360);

    URLImage.ImageAdapter ada = URLImage.createMaskAdapter(roundMask);

    AllUrl au = new AllUrl();
    Image getProfileImage = URLImage.createToStorage(placeholderForProfile, "profile.png",
            au.profileImgUrl + profile_img, ada);
    profileImg.setIcon(getProfileImage);
}
模拟器中的错误:

java.lang.IllegalArgumentException: Mask and image sizes don't match
[EDT] 0:8:44,805 - Exception in AppName version 1.01
[EDT] 0:8:44,805 - OS ios
[EDT] 0:8:44,805 - Error java.lang.IllegalArgumentException: Mask and image sizes don't match
[EDT] 0:8:44,805 - Current Form Profile
[EDT] 0:8:44,805 - Exception: java.lang.IllegalArgumentException - Mask and image sizes don't match
    at com.codename1.ui.Image.applyMask(Image.java:279)
    at com.codename1.ui.URLImage$3.postProcess(URLImage.java:180)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:119)
    at com.codename1.ui.URLImage$DownloadCompleted.actionPerformed(URLImage.java:214)
    at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:459)
    at com.codename1.ui.util.EventDispatcher.access$100(EventDispatcher.java:45)
    at com.codename1.ui.util.EventDispatcher$CallbackClass.run(EventDispatcher.java:95)
Rendering frame took too long 166 milliseconds
    at com.codename1.ui.Display.processSerialCalls(Display.java:1151)
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1095)
    at com.codename1.ui.Display.mainEDTLoop(Display.java:996)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
java.lang.IllegalArgumentException: Mask and image sizes don't match
    at com.codename1.ui.Image.applyMask(Image.java:279)
    at com.codename1.ui.URLImage$3.postProcess(URLImage.java:180)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:119)
    at com.codename1.ui.URLImage$DownloadCompleted.actionPerformed(URLImage.java:214)
    at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:459)
    at com.codename1.ui.util.EventDispatcher.access$100(EventDispatcher.java:45)
    at com.codename1.ui.util.EventDispatcher$CallbackClass.run(EventDispatcher.java:95)
    at com.codename1.ui.Display.processSerialCalls(Display.java:1151)
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1095)
    at com.codename1.ui.Display.mainEDTLoop(Display.java:996)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

遮罩和占位符的大小应该完全匹配。在掩码上调用
scaled
,如果大小已经相同,则可能无效,但如果大小不相同,则会严重失败。

掩码和占位符的大小应完全匹配。您在掩码上调用
缩放
,如果大小已经相同,则可能无效,但如果大小不相同,则会严重失败。

如果不缩放掩码,则会产生相同的错误,因此我保留了它。我在roundMask中保留了占位符的宽度和高度,所以大小必须相同,不是吗?问题是,正如我上面提到的,它只在特定大小的图像上给出错误。在所有其他不同尺寸的情况下,它工作得很好。我解释了为什么它在特定尺寸下会失败。该异常在此处引发:指示掩码大小!=图像大小没有缩放遮罩,它给出了相同的错误,所以我保留了它。我在roundMask中保留了占位符的宽度和高度,所以大小必须相同,不是吗?问题是,正如我上面提到的,它只在特定大小的图像上给出错误。在所有其他不同尺寸的情况下,它工作得很好。我解释了为什么它在特定尺寸下会失败。该异常在此处引发:指示掩码大小!=图像大小