1
여기에 아주 흥미로운 문제가 있습니다. 라운드 마스크를 사용하는 동안 모든 작업이 원활하게 진행되었지만 기기에서 문제가 발견되었습니다. 그래서 시뮬레이터 (iOS 6)에서 확인한 결과 크기 480 * 480 또는 485 * 485의 이미지를 사용하면 "마스크와 이미지 크기가 일치하지 않습니다"라는 오류가 발생합니다. 크기를 470 * 470 및 500 * 500으로 변경하면 완벽하게 작동합니다. 게다가 480 * 475도 잘 작동합니다. 특정 크기의 Square img는 오류를 제공합니다 (예 : 694 * 694, 690 * 690). 시뮬레이터의 디스플레이 너비는 출력에서 750을 표시합니다. 시뮬레이터특정 크기의 이미지를 사용하는 경우 RoundMask가 예외가됩니다.
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)
마스크를 축소하지 않고 같은 오류가 발생하여 보관했습니다. roundMask에 자리 표시 자 너비와 높이를 유지하므로 크기가 동일해야합니다. 그렇지 않습니까? 문제는 위에 언급 한 것처럼 특정 크기의 이미지에만 오류가 발생한다는 것입니다. 크기가 다른 모든 제품에서는 효과가 있습니다. – beck
왜 특정 크기에서 실패 할 수 있는지 설명했습니다. 이 예외는 여기에 던져집니다 : 마스크 크기! = 이미지 크기를 나타내는 https://github.com/codenameone/CodenameOne/blob/master/CodenameOne/src/com/codename1/ui/Image.java#L278-L280 –