我这里有一个非常有趣的问题。虽然使用圆形面膜,它工作得很好,但我发现我的设备有问题。所以我检查了模拟器(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)
答案 0 :(得分:0)
蒙版和占位符的大小应完全匹配。你在掩码上调用scaled
,如果大小已经相同则可能没有效果,但如果不是,则会严重失败。