public static boolean save(Bitmap orgBitmap,String filePath){
  if (orgBitmap == null) {
    return false;
  }
  if (filePath == null) {
    return false;
  }
  boolean isSaveSuccess=true;
  int width=orgBitmap.getWidth();
  int height=orgBitmap.getHeight();
  int dummySize=0;
  byte[] dummyBytesPerRow=null;
  boolean hasDummy=false;
  if (isBmpWidth4Times(width)) {
    hasDummy=true;
    dummySize=BMP_WIDTH_OF_TIMES - (width % BMP_WIDTH_OF_TIMES);
    dummyBytesPerRow=new byte[dummySize * BYTE_PER_PIXEL];
    for (int i=0; i < dummyBytesPerRow.length; i++) {
      dummyBytesPerRow[i]=(byte)0xFF;
    }
  }
  int[] pixels=new int[width * height];
  int imageSize=pixels.length * BYTE_PER_PIXEL + (height * dummySize * BYTE_PER_PIXEL);
  int imageDataOffset=0x36;
  int fileSize=imageSize + imageDataOffset;
  orgBitmap.getPixels(pixels,0,width,0,0,width,height);
  ByteBuffer buffer=ByteBuffer.allocate(fileSize);
  try {
    buffer.put((byte)0x42);
    buffer.put((byte)0x4D);
    buffer.put(writeInt(fileSize));
    buffer.put(writeShort((short)0));
    buffer.put(writeShort((short)0));
    buffer.put(writeInt(imageDataOffset));
    buffer.put(writeInt(0x28));
    buffer.put(writeInt(width));
    buffer.put(writeInt(height));
    buffer.put(writeShort((short)1));
    buffer.put(writeShort((short)24));
    buffer.put(writeInt(0));
    buffer.put(writeInt(imageSize));
    buffer.put(writeInt(0));
    buffer.put(writeInt(0));
    buffer.put(writeInt(0));
    buffer.put(writeInt(0));
    int row=height;
    int col=width;
    int startPosition=0;
    int endPosition=0;
    while (row > 0) {
      startPosition=(row - 1) * col;
      endPosition=row * col;
      for (int i=startPosition; i < endPosition; i++) {
        buffer.put(write24BitForPixcel(pixels[i]));
        if (hasDummy) {
          if (isBitmapWidthLastPixcel(width,i)) {
            buffer.put(dummyBytesPerRow);
          }
        }
      }
      row--;
    }
    FileOutputStream fos=new FileOutputStream(filePath);
    fos.write(buffer.array());
    fos.close();
  }
 catch (  IOException e1) {
    e1.printStackTrace();
    isSaveSuccess=false;
  }
 finally {
  }
  return isSaveSuccess;
}

public static boolean save ( Bitmap orgBitmap , String filePath ) { if ( orgBitmap == null ) { return false ; } if ( filePath == null ) { return false ; } boolean isSaveSuccess = true ; int width = orgBitmap . getWidth ( ) ; int height = orgBitmap . getHeight ( ) ; int dummySize = 0 ; byte [ ] dummyBytesPerRow = null ; boolean hasDummy = false ; if ( isBmpWidth4Times ( width ) ) { hasDummy = true ; dummySize = BMP_WIDTH_OF_TIMES - ( width % BMP_WIDTH_OF_TIMES ) ; dummyBytesPerRow = new byte [ dummySize * BYTE_PER_PIXEL ] ; for ( int i = 0 ; i < dummyBytesPerRow . length ; i ++ ) { dummyBytesPerRow [ i ] = ( byte ) 0xFF ; } } int [ ] pixels = new int [ width * height ] ; int imageSize = pixels . length * BYTE_PER_PIXEL + ( height * dummySize * BYTE_PER_PIXEL ) ; int imageDataOffset = 0x36 ; int fileSize = imageSize + imageDataOffset ; orgBitmap . getPixels ( pixels , 0 , width , 0 , 0 , width , height ) ; ByteBuffer buffer = ByteBuffer . allocate ( fileSize ) ; try { buffer . put ( ( byte ) 0x42 ) ; buffer . put ( ( byte ) 0x4D ) ; buffer . put ( writeInt ( fileSize ) ) ; buffer . put ( writeShort ( ( short ) 0 ) ) ; buffer . put ( writeShort ( ( short ) 0 ) ) ; buffer . put ( writeInt ( imageDataOffset ) ) ; buffer . put ( writeInt ( 0x28 ) ) ; buffer . put ( writeInt ( width ) ) ; buffer . put ( writeInt ( height ) ) ; buffer . put ( writeShort ( ( short ) 1 ) ) ; buffer . put ( writeShort ( ( short ) 24 ) ) ; buffer . put ( writeInt ( 0 ) ) ; buffer . put ( writeInt ( imageSize ) ) ; buffer . put ( writeInt ( 0 ) ) ; buffer . put ( writeInt ( 0 ) ) ; buffer . put ( writeInt ( 0 ) ) ; buffer . put ( writeInt ( 0 ) ) ; int row = height ; int col = width ; int startPosition = 0 ; int endPosition = 0 ; while ( row > 0 ) { startPosition = ( row - 1 ) * col ; endPosition = row * col ; for ( int i = startPosition ; i < endPosition ; i ++ ) { buffer . put ( write24BitForPixcel ( pixels [ i ] ) ) ; if ( hasDummy ) { if ( isBitmapWidthLastPixcel ( width , i ) ) { buffer . put ( dummyBytesPerRow ) ; } } } row -- ; } FileOutputStream fos = new FileOutputStream ( filePath ) ; fos . write ( buffer . array ( ) ) ; fos . close ( ) ; } catch ( IOException e1 ) { e1 . printStackTrace ( ) ; isSaveSuccess = false ; } finally { } return isSaveSuccess ; }
android bitmap object to window ' s v3 24bit bmp format file
