diff --git a/tools/rgb2565/Android.mk b/tools/rgb2565/Android.mk
new file mode 100644
index 0000000..189584d
--- /dev/null
+++ b/tools/rgb2565/Android.mk
@@ -0,0 +1,17 @@
+# Copyright 2008 The Android Open Source Project
+#
+# Android.mk for rgb2565
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+# rgb2565 host tool
+# =========================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := to565.c
+
+LOCAL_CFLAGS += -O2 -Wall -Wno-unused-parameter
+LOCAL_MODULE := rgb2565
+
+include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/rgb2565/to565.c b/tools/rgb2565/to565.c
new file mode 100644
index 0000000..01d14aa
--- /dev/null
+++ b/tools/rgb2565/to565.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+	      
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#define to565(r,g,b) \
+    ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
+
+void to_565_raw(void)
+{
+    unsigned char in[3];
+    unsigned short out;
+    
+    while(read(0, in, 3) == 3) {
+        out = to565(in[0],in[1],in[2]);
+        write(1, &out, 2);
+    }
+    return;
+}
+
+void to_565_rle(void)
+{
+    unsigned char in[3];
+    unsigned short last, color, count;
+    unsigned total = 0;
+    count = 0;
+
+    while(read(0, in, 3) == 3) {
+        color = to565(in[0],in[1],in[2]);
+        if (count) {
+            if ((color == last) && (count != 65535)) {
+                count++;
+                continue;
+            } else {
+                write(1, &count, 2);
+                write(1, &last, 2);
+                total += count;
+            }
+        }
+        last = color;
+        count = 1;
+    }
+    if (count) {
+        write(1, &count, 2);
+        write(1, &last, 2);
+        total += count;
+    }
+    fprintf(stderr,"%d pixels\n",total);
+}
+
+int main(int argc, char **argv)
+{
+    if ((argc > 1) && (!strcmp(argv[1],"-rle"))) {
+        to_565_rle();
+    } else {
+        to_565_raw();
+    }
+    return 0;
+}
