 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Argone Lt


Registrado: 23 Jun 2003Mensajes: 97Ubicación: Las Palmas.. España
|
Publicado: Lun 06 Oct, 2003 9:49 pm Asunto: Explicacion de Codigo de _Leo |
|
|
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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
|
| Volver arriba |
|
 |
Argone Lt


Registrado: 23 Jun 2003Mensajes: 97Ubicación: Las Palmas.. España
|
Publicado: Mar 07 Oct, 2003 6:45 pm Asunto: |
|
|
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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
|
| Volver arriba |
|
 |
Argone Lt


Registrado: 23 Jun 2003Mensajes: 97Ubicación: Las Palmas.. España
|
Publicado: Mar 07 Oct, 2003 7:23 pm Asunto: |
|
|
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 |
|
 |
Argone Lt


Registrado: 23 Jun 2003Mensajes: 97Ubicación: Las Palmas.. España
|
Publicado: Mar 07 Oct, 2003 7:53 pm Asunto: |
|
|
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 |
|
 |
Argone Lt


Registrado: 23 Jun 2003Mensajes: 97Ubicación: Las Palmas.. España
|
Publicado: Mar 07 Oct, 2003 8:23 pm Asunto: Explicacion de Codigo de _Leo (Resolucion) |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|