[How To] Setup Static Bootlogo (Before Animated Boot Animation)

Discussion in 'Android Tablet Hacking' started by xaueious, Aug 3, 2010.

  1. xaueious

    xaueious Administrator Staff Member

    Joined:
    Jul 9, 2010
    Messages:
    3,483
    Likes Received:
    435
    Trophy Points:
    222
    Location:
    Canada
    Tablet / Device:
    Asus Transformer TF300, Huwaei Ideos S7-104, HSG X5A, (Past APAD IMX515, APAD RK2808, RK2818 RT7)
    To setup the static bootlogo, you need to create a specially formatted image to be named initlogo.rle to be placed in the root directory of the ramdisk.

    You need the 'convert' binary to convert the image to a raw rgb888 file, and the to565 will convert it to initlogo.rle.

    The resolution of the boot logo should be the size of the screen, in pixels. For example, 800x480.

    I use a script under Ubuntu to convert my png image to my static splash logo:
    Code:
    #! /bin/sh
    convert -depth 8 splash.png rgb:splash.raw
    ./to565 -rle < splash.raw > initlogo.rle
    you need need the to565 compiled (gcc -o to565 to565.c):
    Code:
    /*
     * 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))
    
    #define from565_r(x) ((((x) >> 11) & 0x1f) * 255 / 31)
    #define from565_g(x) ((((x) >> 5) & 0x3f) * 255 / 63)
    #define from565_b(x) (((x) & 0x1f) * 255 / 31)
    
    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_raw_dither(int width)
    {
        unsigned char in[3];
        unsigned short out;
        int i = 0;
        int e;
    
        int* error = malloc((width+2) * 3 * sizeof(int));
        int* next_error = malloc((width+2) * 3 * sizeof(int));
        memset(error, 0, (width+2) * 3 * sizeof(int));
        memset(next_error, 0, (width+2) * 3 * sizeof(int));
        error += 3;        // array goes from [-3..((width+1)*3+2)]
        next_error += 3;
    
        while(read(0, in, 3) == 3) {
            int r = in[0] + error[i*3+0];
            int rb = (r < 0) ? 0 : ((r > 255) ? 255 : r);
    
            int g = in[1] + error[i*3+1];
            int gb = (g < 0) ? 0 : ((g > 255) ? 255 : g);
    
            int b = in[2] + error[i*3+2];
            int bb = (b < 0) ? 0 : ((b > 255) ? 255 : b);
    
            out = to565(rb, gb, bb);
            write(1, &out, 2);
    
    #define apply_error(ch) {                                               \
                next_error[(i-1)*3+ch] += e * 3 / 16;                       \
                next_error[(i)*3+ch] += e * 5 / 16;                         \
                next_error[(i+1)*3+ch] += e * 1 / 16;                       \
                error[(i+1)*3+ch] += e - ((e*1/16) + (e*3/16) + (e*5/16));  \
            }
    
            e = r - from565_r(out);
            apply_error(0);
    
            e = g - from565_g(out);
            apply_error(1);
    
            e = b - from565_b(out);
            apply_error(2);
    
    #undef apply_error
    
            ++i;
            if (i == width) {
                // error <- next_error; next_error <- 0
                int* temp = error; error = next_error; next_error = temp;
                memset(next_error, 0, (width+1) * 3 * sizeof(int));
                i = 0;
            }
        }
    
        free(error-3);
        free(next_error-3);
    
        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 == 2) && (!strcmp(argv[1],"-rle"))) {
            to_565_rle();
        } else {
            if (argc > 2 && (!strcmp(argv[1], "-w"))) {
                to_565_raw_dither(atoi(argv[2]));
            } else {
                to_565_raw();
            }
        }
        return 0;
    }
    
    XDA reading:
    initlogo.rle: display an image on boot - xda-developers

    Android wiki reading:
    HOWTO: Unpack, Edit, and Re-Pack Boot Images - Android Wiki
     
    • Like Like x 6
  2. ZilverZurfarn

    ZilverZurfarn Member

    Joined:
    May 3, 2010
    Messages:
    133
    Likes Received:
    8
    Trophy Points:
    87
    Location:
    NULL
    I might add that the binaries for to565 (both Windows and Linux) can be found here if you're not up to compiling it yourself.
     
  3. ZilverZurfarn

    ZilverZurfarn Member

    Joined:
    May 3, 2010
    Messages:
    133
    Likes Received:
    8
    Trophy Points:
    87
    Location:
    NULL
    OK, so now that I got me a nice new boot splash, and would like to tweak update.img, where in update.img should it be placed? Can't find initlogo.rle anywhere.
    Edit N.M. Found it in boot.img /Edit
     
    Last edited: Aug 17, 2010
  4. RomanticEvil

    RomanticEvil Member

    Joined:
    Oct 26, 2010
    Messages:
    245
    Likes Received:
    22
    Trophy Points:
    87
    Location:
    Tilburg, the Netherlands
    Tablet / Device:
    Gome FlyTouch / SmartQ7 / HTC X7500 / M006 / CVUK-PC06-2GEN / WMT2.1
    Thanks Xaueious this is what I'm looking for atm!
     
  5. cmylxgo

    cmylxgo Member

    Joined:
    Feb 24, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    60
    Thanks Xaueious for the info. I am having a hard time finding the convert binary. Could you post a link to the biniaries that you used?

    Thanks again
    -CMYLXGO
     
  6. l_n

    l_n Senior Member

    Joined:
    Dec 28, 2010
    Messages:
    788
    Likes Received:
    99
    Trophy Points:
    102
    Location:
    TN, USA
    Tablet / Device:
    Mid7015
    convert is part of the ImageMagick software suite (lots of libraries and utilities in there.. wonderful bit of work from the open source community.)
     
  7. venkatraman7

    venkatraman7 Member

    Joined:
    Dec 6, 2010
    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    60
    Location:
    Puducherry
    Tablet / Device:
    Android Tablet 2.2
    Hi all,

    I am trying to change splash screen for android with my own splash screen
    I followed the steps as follows:
    1. Created a new image and save it as raw file
    2. I tried to change raw file to rle file using to565 C program but failed the coding is not showing any dependency nor any error so I download a sample initlogo.rle from net :cool:
    3. I pasted the initlogo.rle to /out directory
    4.I compiled the source code

    but no change is happened :mad:

    I tried in init.rc to stop the boot animation and I got succeed in it but not on changing the splash screen

    Please correct me If i made any mistakes
     

Share This Page

Search tags for this page
android static boot image
,
boot logo 720p devices
,
boot logo 800x480
,
boot logo android 800x480
,
boot logo animation tablet
,
boot logo tablet
,
cambiar boot logo android
,

change boot logo android tablet

,
chqnge boot logo android ubuntu
,
color change android bootlogo
,
download boot logo blackberry untuk android
,
how change logo manufacturer on android boot
,
how to change boot logo android
,
how to change tablet logo
,
how to install boot logo on tablet
,
how to remove the logo before boot animation android
,
how to set boot logo in android
,
image before boot animation
,
static boot logo
,
where is boot logo located on android tablet