2016-09-30 7 views
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) 

答えて

0

マスクとプレースホルダは正確にサイズが一致している必要があります。マスク上でscaledを呼び出すと、サイズがすでに同じであれば効果がないかもしれませんが、そうでない場合は失敗することになります。

+0

マスクをスケーリングせずに、同じエラーが発生していたので、私はそれを保ちました。私はroundMaskにプレースホルダの幅と高さを保持しているので、サイズは同じでなければならないのですか?問題は、上記のように特定のサイズの画像にのみエラーが発生していることです。サイズの違う他のすべてでは、それは素晴らしい仕事です。 – beck

+0

なぜ特定のサイズで失敗するのか説明しました。この例外はここでスローされます:https://github.com/codenameone/CodenameOne/blob/master/CodenameOne/src/com/codename1/ui/Image.java#L278-L280マスクサイズ!=イメージサイズ –

関連する問題