2014-12-28 1 views
1

비트 맵을 병합하는 방법을 많이 찾았습니다. 이제는 똑같은 것을 시도하고 있지만, 전에 보았던 모든 시도처럼 Android jars가 없기 때문입니다.표준 Java로 비트 맵을 병합하십시오.

나는 128 * 128 픽셀의 16 비트 이미지를 가지고 있습니다.

필자가 수직으로 병합해야하는 이유는 완전히 검은 색 bmp 128x128 * 16입니다 ... 작동하지 않습니다. 여기

BufferedImage[] input = new BufferedImage[16]; 
     int counter = 0; 
     for(File f: new File(fixBmpPathFolder).listFiles()){ 
      System.out.println(f.getAbsolutePath() + " loaded!"); 
      int type = BufferedImage.TYPE_BYTE_BINARY; 

      input[counter] = new BufferedImage(ImageIO.read(f).getWidth(null), ImageIO.read(f).getHeight(null), type); 
      counter++; 
     } 
     mergeAndSave(input); 

그리고 mergeAndSave 방법 :

128 개 * 128 픽셀 타일이 BufferedImage의 배열에있는 모든 BMPS 읽기 :

내가 지금까지 한 일이다
public static void mergeAndSave(BufferedImage input[]) throws IOException { 
     BufferedImage bimage = new BufferedImage(128, 128*input.length, BufferedImage.TYPE_BYTE_BINARY); 
     Graphics g = bimage.createGraphics(); 
     int y = 0; 
     for (int i = 0; i < input.length; i++) { //replaced by input.length 
      g.drawImage(input[i],0,y,null); 
      y += 128; 
     } 
     g.dispose(); 
     ImageIO.write(bimage, "BMP", new FileOutputStream(getFileResultAbsoluteName())); 
    } 

이제는 png에 대해 비슷한 시도를했습니다. 일부 연구에서는 bmps에서도 작동 할 수 있음을 알게되었습니다. 버퍼링 된 형식의 정수 열거 형을 올바르게 설정 한 것입니다. 결과 이미지.

나는이 코드를 하나의 bmp로 실행 했으므로 다른 곳에서 읽고 저장하면됩니다.

내 필요에 따라 파일은 바이너리 형식이어야합니다.

감사합니다.

편집 : 죄송합니다 얘들 아, 나는 싱글 루프에서 마지막 실험 값을 떠나지 만 이미지의 완전한 루프를 사용하여 분명히 노력했습니다. 이제이 코드가 환상적이지는 않다는 것을 알았지 만 목표를 달성하는 것은 간단한 흠집입니다. 이들을 수직으로 병합한다는 것은 동일한 크기 (128 * 128)의 16 비트 맵을 얻었으며 결과 비트 맵을 얻고 싶습니다. 시작 비트 16이 합쳐져서 서로 겹치는 부분이됩니다.

+1

그래서 질문은 무엇입니까?) – Divers

+0

* 수직으로 병합하는 것은 무엇을 의미합니까? –

답변

0

가장 큰 문제는 for 루프입니다. 여기에서 1의 경계를 하드 코드 했으므로 물론 이것을 input.length으로 바꿔야합니다. 이 16 이미지는 하드 의미하는 것이기 때문에

는 또한 또한, 128*input.length 대신 128*16으로 BufferedImage의 건설을 교체했습니다.

마지막으로 hcounty으로 바꿨습니다. 더 의미있는 이름이기 때문에입니다.

public static void mergeAndSave(BufferedImage input[]) throws IOException { 
    int type = BufferedImage.TYPE_BYTE_BINARY; 
    BufferedImage bimage = new BufferedImage(128, 128*input.length, type); 
    Graphics g = bimage.createGraphics(); 
    int y = 0; 
    for (int i = 0; i < input.length; i++) { //replaced by input.length 
     g.drawImage(input[i],0,y,null); 
     y += 128; 
    } 
    g.dispose(); 
    ImageIO.write(bimage, "BMP", new FileOutputStream(getFileResultAbsoluteName())); 
} 

그러나이 코드는 잘 구성되어 있지 않습니다. 그것은 이미지에 대해 많은 가정을합니다. 이 만드는 코드는 거의 재사용하지, 좋은 코드의 주요 측면 중 하나

  • 대신이 제약 조건을 삭제할 수 있습니다, 모든 이미지가 128x128의 크기가 동일 가정;
  • 많은 상수를 하드 코드합니다.

아마도 더 많은 문제를 해결할 수 있도록 코드를 좀 더 일반적인 것으로 만드는 것이 좋습니다.

+0

나는 더 나은 설명을 해왔다. 어쨌든이 코드는 지금까지 해왔 던 것과 동일하게 만들어졌고 대답이 아니다. –

+0

@ 마크 : 새 버전을 사용하면 첫 번째 버전에서 약간의 오류가 발생했다. , 결과 이미지에서 "병합"된 이미지를 얻습니다 ... –

+0

그렇지 않습니다. u가 내 이미지를 사용할 수 있기를 원하면 여기에 업로드했습니다 : http : //www.filedropper.com/bs2originalfix –