2016-09-06 3 views
2

를 생성한다. 그것 아주 긴 이미지. 비트 맵 목록을 생성해야합니다 (원본 소스에서 세그먼트 화 된 비트 맵).분할 비트 맵 파일 내가 만든이 방법 비트 맵 분리하는 것을 시도하고, Y의 + 높이해야 할 <= bitmap.height() 에러

Caused by: java.lang.IllegalArgumentException: y + height must be <= bitmap.height()

이 가

여기 내 논리는 무엇인가 같다 : 나는 Y 축에서 400 픽셀로 0 픽셀로 시작 1) 2) 내가 시작 i 명중 2400, 그것은 말하는 오류를 결선 할 때 y 축의 400 픽셀에서 800 픽셀까지 등등 ...

현재 반복은 아직 4298 개까지 도달하지 못했으며 (2400 픽셀에서) 불평합니다. 왜 이렇게 생각하니?

감사합니다. 난 당신의 코드에서 보듯이

답변

0

그래서 여기 내 새로운 방법입니다. 예를 들어 내 경우에는 높이가 4298이고 4000에 도달했습니다. 마지막 298을 처리해야하기 때문에 한계는 내 everyPixel 값 대신 298이어야합니다.

내가 보는 방법은 Bitmap.createBitmap(comicBitmap, 0, i, width, limit) 세 번째 매개 변수 (y)가 실제로 다섯 번째 매개 변수 (높이)에 추가된다는 것입니다. 내가 400-800th 픽셀을 처리 할 경우에 따라서는해야한다 : 비트 맵의 ​​최종 높이를 평가할 때

Bitmap.createBitmap(comicBitmap, 0, 400, width, 400);

세 번째 PARAM은 5에 추가합니다.

나는 이것을 매우 직관적이라고 생각합니다. 하지만 그저 내 생각에.

+0

해결책을 찾았습니까? –

1

이 문제는 일치한다 :

Bitmap bitmap = Bitmap.createBitmap(comicBitmap, 0, i, width, i + everyPixel); 

예를 들어, 당신은 width = 1000, height = 3000하지만 everyPixel = 2000 있습니다. 사이클의 두 번째 반복에서 당신은 i = 2000을 가질 것이고 왼쪽 = 0, 위쪽 = 2000, 너비 = 1000, 높이 = i + everyPixel = 4000으로 부분을 얻음으로써 comicbitmap에서 비트 맵을 만들려고 시도하지만 전체 비트 맵의 ​​높이는 3000입니다. 이 오류가 발생합니다.

자세한 내용은 thisthis을 참조하십시오.

private List<Bitmap> splitBitmap(File file, int everyPixel) 
{ 
    Bitmap comicBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
    List<Bitmap> segments = new ArrayList<>(); 

    if(comicBitmap == null) 
     return segments; 

    int height = comicBitmap.getHeight(); 
    int width = comicBitmap.getWidth(); 

    for(int i = 0; i < height; i += everyPixel) 
    { 
     i = i >= height? height : i; 
     int limit = i + everyPixel >= height? height - i : everyPixel; 

     Bitmap bitmap = Bitmap.createBitmap(comicBitmap, 0, i, width, limit); 
     segments.add(bitmap); 
    } 

    return segments; 
} 

공지 사항 라인 :

i = i >= height? height : i; 
int limit = i + everyPixel >= height? height - i : everyPixel; 

이 실제로 모든 픽셀이 고려되어 있는지 확인

+0

디버거에서이 내용을 확인했지만 그렇지 않았습니다. 'i = i> = 높이를 두는 이유는 무엇입니까? 높이 : 나는 그 문제에 대해. 나는 매 400 픽셀을 반복하고 있습니다. 제가 말했듯이, 디버거에서 나는'i'가 2400에있을 때 불평하는 것을 발견했습니다. 내가 달리고있는 높이는 4298입니다. 이것은 이해가되지 않습니다. –

+0

네 번째 param은'everyPixel' 만 'i + everyPixel'이 아니어야합니다 –