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

답변

0

마스크와 자리 정확하게 크기가 일치해야합니다. 마스크에 scaled을 호출하면 크기가 이미 동일하지만 효과가 없을 수 있지만 효과가 없을 수 있습니다.

+0

마스크를 축소하지 않고 같은 오류가 발생하여 보관했습니다. roundMask에 자리 표시 자 너비와 높이를 유지하므로 크기가 동일해야합니다. 그렇지 않습니까? 문제는 위에 언급 한 것처럼 특정 크기의 이미지에만 오류가 발생한다는 것입니다. 크기가 다른 모든 제품에서는 효과가 있습니다. – beck

+0

왜 특정 크기에서 실패 할 수 있는지 설명했습니다. 이 예외는 여기에 던져집니다 : 마스크 크기! = 이미지 크기를 나타내는 https://github.com/codenameone/CodenameOne/blob/master/CodenameOne/src/com/codename1/ui/Image.java#L278-L280 –

관련 문제