auto import from //depot/cupcake/@135843
diff --git a/tools/ota/convert-to-bmp.py b/tools/ota/convert-to-bmp.py
new file mode 100644
index 0000000..446c09d
--- /dev/null
+++ b/tools/ota/convert-to-bmp.py
@@ -0,0 +1,79 @@
+#!/usr/bin/python2.4
+
+"""A simple script to convert asset images to BMP files, that supports
+RGBA image."""
+
+import struct
+import Image
+import sys
+
+infile = sys.argv[1]
+outfile = sys.argv[2]
+
+if not outfile.endswith(".bmp"):
+  print >> sys.stderr, "Warning: I'm expecting to write BMP files."
+
+im = Image.open(infile)
+if im.mode == 'RGB':
+  im.save(outfile)
+elif im.mode == 'RGBA':
+  # Python Imaging Library doesn't write RGBA BMP files, so we roll
+  # our own.
+
+  BMP_HEADER_FMT = ("<"      # little-endian
+                    "H"      # signature
+                    "L"      # file size
+                    "HH"     # reserved (set to 0)
+                    "L"      # offset to start of bitmap data)
+                    )
+
+  BITMAPINFO_HEADER_FMT= ("<"      # little-endian
+                          "L"      # size of this struct
+                          "L"      # width
+                          "L"      # height
+                          "H"      # planes (set to 1)
+                          "H"      # bit count
+                          "L"      # compression (set to 0 for minui)
+                          "L"      # size of image data (0 if uncompressed)
+                          "L"      # x pixels per meter (1)
+                          "L"      # y pixels per meter (1)
+                          "L"      # colors used (0)
+                          "L"      # important colors (0)
+                          )
+
+  fileheadersize = struct.calcsize(BMP_HEADER_FMT)
+  infoheadersize = struct.calcsize(BITMAPINFO_HEADER_FMT)
+
+  header = struct.pack(BMP_HEADER_FMT,
+                       0x4d42,   # "BM" in little-endian
+                       (fileheadersize + infoheadersize +
+                        im.size[0] * im.size[1] * 4),
+                       0, 0,
+                       fileheadersize + infoheadersize)
+
+  info = struct.pack(BITMAPINFO_HEADER_FMT,
+                     infoheadersize,
+                     im.size[0],
+                     im.size[1],
+                     1,
+                     32,
+                     0,
+                     0,
+                     1,
+                     1,
+                     0,
+                     0)
+
+  f = open(outfile, "wb")
+  f.write(header)
+  f.write(info)
+  data = im.tostring()
+  for j in range(im.size[1]-1, -1, -1):   # rows bottom-to-top
+    for i in range(j*im.size[0]*4, (j+1)*im.size[0]*4, 4):
+      f.write(data[i+2])    # B
+      f.write(data[i+1])    # G
+      f.write(data[i+0])    # R
+      f.write(data[i+3])    # A
+  f.close()
+else:
+  print >> sys.stderr, "Don't know how to handle image mode '%s'." % (im.mode,)