1
ここでは非常に興味深い問題があります。ラウンドマスクを使用している間、すべてうまくいっていましたが、私のデバイスに問題が見つかりました。そこで私はシミュレータ(iOS 6)をチェックして、サイズ480 * 480または485 * 485のイメージを使用すると「マスクとイメージのサイズが一致しません」というエラーが発生することがわかりました。私は470 * 470と500 * 500にサイズを変更し、それは完全に動作します。さらに、480 * 475もうまく動作します。特定のサイズのスクエア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マスクサイズ!=イメージサイズ –