Cómo convertir los colores a escala de grises en java con solo java.io. *; ¿biblioteca?

Bueno, tengo esto ... porque en mi lugar lo solicitan así ... Bueno, tengo esto: // algunas variables y comentarios son un código posible ... Pero quiero decir que no sé cómo hacerlo exactamente, yo encontrado en internet que para convertir R es el byte está en * 0.21 con G es * 0.71 supongo y azul es * 0.07. Solo puedo usar esa biblioteca java.io. *; y estoy trabajando con imágenes en formato BMP de 1024 x 768, si puedes ayudarme o quieres que sea más específico, por favor, dímelo. No sé si tengo que agregar otras variables, sacar algunas o modificar, por favor, ayúdame. No soy tan nuevo en este idioma, pero no soy un experto. El código está aquí:

import java.io. *;

clase pública escala de grises {

FileInputStream image;
FileOutputStream img;
byte[] datos;
int i;
int cont;

public Grayscale(String nombre)throws Exception{

    this.image = new FileInputStream(nombre);
    this.img = img;
    this.datos = new byte[image.available()];
    this.i = 54;
    this.cont = 1;
}

public void gray()throws Exception{

    image.read(datos);
    img = new FileOutputStream("grayscale.bmp");

    while(i<datos.length){
        if(cont == 1){
            datos[i] = datos[i] ;//* 0.21;
            cont++;
        } else if(cont == 2){
            datos[i] = datos [i] ;//* 0.71;
            cont++;
        } else if(cont == 3){
            datos[i] = datos[i] ;//* 0.07;
            cont++;
        }else{
            cont = 1;
        }
        i++;
    }
    img.write(datos);
}

}

Respuestas a la pregunta(3)

Su respuesta a la pregunta