Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Explicacion de Codigo de _Leo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Explicacion de Codigo de _Leo Responder citando

Hola otra vez,

Vamos a ver si alguien me puede ayudar con este trozo de _Leo que no me queda claro. Segun he visto es para crear un objeto bitmap.

Código:
const int ANCHO = 320, ALTO = 240;
BYTE pant[ANCHO][ALTO];
int x, y, i;

// Dibujamos en el array (aqui cambia la variable pant por tu matriz)
for (y=0; y<ALTO; y++)
   for (x=0; x<ANCHO; x++)
  pant[x][y] = x/2+90;

BITMAPINFO *bmi;
bmi = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256];
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi->bmiHeader.biWidth = ANCHO;

// Si especificamos el alto en negativo la linea 0 estara arriba
// y si es en positivo se dibuja desde abajo hacia arriba
bmi->bmiHeader.biHeight = -ALTO;

// Será un bitmap de 256 colores, o sea 8 bits de color
bmi->bmiHeader.biPlanes = 1;
bmi->bmiHeader.biBitCount = 8;
bmi->bmiHeader.biCompression = BI_RGB;
bmi->bmiHeader.biSizeImage = 0;
bmi->bmiHeader.biXPelsPerMeter = 0;
bmi->bmiHeader.biYPelsPerMeter = 0;
bmi->bmiHeader.biClrUsed = 0;
bmi->bmiHeader.biClrImportant = 0;

// Rellenamos la paleta con tonos de gris
for (i=0; i<256; i++)
{
   bmi->bmiColors[i].rgbRed = i;
   bmi->bmiColors[i].rgbGreen = i;
   bmi->bmiColors[i].rgbBlue = i;
   bmi->bmiColors[i].rgbReserved = 0;
}

// Dibujamos el array en el canvas del TImage
SetDIBitsToDevice(Image1->Canvas->Handle, 0, 0,
     ANCHO, ALTO, 0, 0,
     0, ALTO,
     pant, bmi, DIB_RGB_COLORS);

delete bmi;


Lo tengo toda claro menos la parte inicial

Código:

code]const int ANCHO = 320, ALTO = 240;
BYTE pant[ANCHO][ALTO];
int x, y, i;

// Dibujamos en el array (aqui cambia la variable pant por tu matriz)
for (y=0; y<ALTO; y++)
   for (x=0; x<ANCHO; x++)
  pant[x][y] = x/2+90;


Supuestamente y segun tengo entendido pant tiene que contener , dependiendo del color que se quiera representar, la direccion de color de la paleta correspondiente por lo que no entiendo por que se realiza esa igualacoin con x/2 +90. Alguien me lo puede exlicar. Muchas gracias

Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Segun veo es simplemente para darle un degradado. Es decir la variacion de colores desde el inicio (Top) de la matriz hasta el final.

Es esa tu duda ?
Saludos.-
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Si..muchas gracias..me di cuenta luego...pero es que no veia por que tenia que ser esa operacion...Ahora me he dado cuenta de que en realidad son valores que van desde 0 hasta 255 representando el color correspondiete de la tabla definida mas abajo.

Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Exacto Wink
Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Sin embargo por que no me funcina si lo hago de la siguiente forma... No me lo pinta..

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        const int X = Edit1->Text.ToInt();
        const int Y = Edit2->Text.ToInt();
       
        BYTE **pant;

        pant = new BYTE*[X];
        for (int i=0;i<X;i++) {
                pant[i] = new BYTE[Y];
                for (int j=0;j<Y;j++) {
                        pant[i][j] = 255;
                };
        };


        int ANCHO = X, ALTO = Y;

        BITMAPINFO *bmi;
bmi = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256];
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi->bmiHeader.biWidth = ANCHO;

// Si especificamos el alto en negativo la linea 0 estara arriba
// y si es en positivo se dibuja desde abajo hacia arriba
bmi->bmiHeader.biHeight = -ALTO;

// Será un bitmap de 256 colores, o sea 8 bits de color
bmi->bmiHeader.biPlanes = 1;
bmi->bmiHeader.biBitCount = 8;
bmi->bmiHeader.biCompression = BI_RGB;
bmi->bmiHeader.biSizeImage = 0;
bmi->bmiHeader.biXPelsPerMeter = 0;
bmi->bmiHeader.biYPelsPerMeter = 0;
bmi->bmiHeader.biClrUsed = 0;
bmi->bmiHeader.biClrImportant = 0;

// Rellenamos la paleta con tonos de gris
for (int i=0; i<256; i++)
{
   bmi->bmiColors[i].rgbRed = i;
   bmi->bmiColors[i].rgbGreen = i;
   bmi->bmiColors[i].rgbBlue = i;
   bmi->bmiColors[i].rgbReserved = 0;
}

// Dibujamos el array en el canvas del TImage
SetDIBitsToDevice(Image1->Canvas->Handle, 0, 0,
     ANCHO, ALTO, 0, 0,
     0, ALTO,
     *pant, bmi, DIB_RGB_COLORS);

delete bmi;
}


Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Por que no me funciona esto..Bueno mas que no me funciona..porque se queda siempre con el tamaño que tiene el TIMAGE. Tengo AutoSize a true e incluso despues de escribir el bitmap fuerzo la imagen a un tamaño y se queda igual

Código:

     BYTE pant[700][700];
//        pant = new BYTE*[X];
        for (int i=0;i<700;i++) {
//                pant[i] = new BYTE[Y];
                for (int j=0;j<700;j++) {
                        pant[i][j] = 255;
                };
        };


        int ANCHO = 700, ALTO = 700;

//        this->Image1 = new TImage(this);
//        this->Image1->Width = ALTO;
//        this->Image1->Height = ANCHO;

        BITMAPINFO *bmi;
bmi = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256];
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi->bmiHeader.biWidth = ANCHO;

// Si especificamos el alto en negativo la linea 0 estara arriba
// y si es en positivo se dibuja desde abajo hacia arriba
bmi->bmiHeader.biHeight = -ALTO;

// Será un bitmap de 256 colores, o sea 8 bits de color
bmi->bmiHeader.biPlanes = 1;
bmi->bmiHeader.biBitCount = 8;
bmi->bmiHeader.biCompression = BI_RGB;
bmi->bmiHeader.biSizeImage = 0;
bmi->bmiHeader.biXPelsPerMeter = 0;
bmi->bmiHeader.biYPelsPerMeter = 0;
bmi->bmiHeader.biClrUsed = 0;
bmi->bmiHeader.biClrImportant = 0;

// Rellenamos la paleta con tonos de gris
for (int i=0; i<256; i++)
{
   bmi->bmiColors[i].rgbRed = i;
   bmi->bmiColors[i].rgbGreen = i;
   bmi->bmiColors[i].rgbBlue = i;
   bmi->bmiColors[i].rgbReserved = 0;
}

// Dibujamos el array en el canvas del TImage
SetDIBitsToDevice(Image1->Canvas->Handle, 0, 0,
     ANCHO, ALTO, 0, 0,
     0, ALTO,
     pant, bmi, DIB_RGB_COLORS);

delete bmi;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        int X = Edit1->Text.ToInt();
        int Y = Edit2->Text.ToInt();

       //supongamos que pongo 1000 y 10000

        Image1->Height = X;
        Image1->Width = Y;
        Image1->Repaint();
}


Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Explicacion de Codigo de _Leo (Resolucion) Responder citando

El problema estaba en que no habia inicializado la imagen.

Código:

Image1 = new TImage(this);
Image1->Parent = this;


Despues de hacer esto va a la perfeccion lo unico raro que he notado es que si creo la imagen a partir de una matriz creada dinamicamente y poniendo todos los valores a 255, supuestamente deberia de salir todo blanco. Me salen algunas lineas negras. Muchas gracias por todo

Agone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.