Como converter cores para escala de cinza em java com apenas o java.io. *; biblioteca?

Bem, eu tenho isso .. porque no meu lugar eles pedem assim .. Bem, eu tenho isso: // algumas variáveis ​​e comentários são um código possível .. Mas eu quero dizer, eu não sei como fazer isso exatamente, eu encontrado na internet que para converter R é o byte é em * 0,21 com G é * 0,71 eu acho que e azul é * 0,07. Eu só posso usar essa biblioteca java.io. *; e eu estou trabalhando com imagens em formato BMP de 1024 x 768, se você puder me ajudar, ou se você quiser que eu seja mais específico, por favor me diga. Eu não sei se eu tenho que adicionar outras variáveis ​​ou tirar algumas, ou modificar, por favor me ajude. Eu não sou tão novo nesta língua, mas eu não sou um especialista. O código está bem aqui:

import java.io. *;

classe pública Grayscale {

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);
}

}

questionAnswers(3)

yourAnswerToTheQuestion