| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
biohazard Invitado
|
Publicado: Mie 12 Nov, 2003 3:20 pm Asunto: Funcion Espejo a un archivo BMP |
|
|
Estoy haciendo un editor de fotos, pero no he podido implementar la funcion espejo al archivo BMP abierto, la forma mas simple que exista de hacerlo. Usando canvas tal vez podria pero no se como, si alguien me pudiera dar una mano, gracias.  |
|
| Volver arriba |
|
 |
Davik Invitado
|
Publicado: Mie 12 Nov, 2003 4:55 pm Asunto: |
|
|
Se me ocurre algo así:
| Código: |
char *ptr;
char *linea=new char[3*Image1->Picture->Bitmap->Width];
for (int y = 0; y < Image1->Picture->Bitmap->Height; y++)
{
ptr =(char *)Image1->Picture->Bitmap->ScanLine[y];
for (int x = 0; x < 3*Image1->Picture->Bitmap->Width; x=x+3)
{
linea[x]=ptr[3*Image1->Picture->Bitmap->Width-x-3];
linea[x+1]=ptr[3*Image1->Picture->Bitmap->Width-x-2];
linea[x+2]=ptr[3*Image1->Picture->Bitmap->Width-x-1];
}
for (int x = 0; x < 3*Image1->Picture->Bitmap->Width; x++)
{
ptr[x]=linea[x];
}
}
|
No es muy eficiente pero funciona, espero haberte ayudado.
Saludos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 12 Nov, 2003 5:04 pm Asunto: |
|
|
Quizás te sirva la siguiente función:
| Código: | //---Añadimos: #include<algorithm>
void ReflejaBmp(Graphics::TBitmap* bmp)
{
// Ponemos el bitmap en modo RGBTriple para trabajar más fácil
bmp->PixelFormat = pf24bit;
// Intercambiamos los pixels por las dos puntas en cada línea
for (int y = 0; y < bmp->Height; y++)
{
RGBTRIPLE* pPixel = static_cast<RGBTRIPLE*>(bmp->ScanLine[y]);
for (int x = 0; x < bmp->Width/2; x++)
{
std::swap(pPixel[x], pPixel[bmp->Width - x - 1]);
}
}
}
|
Un ejemplo de como usarla:
| Código: | ReflejaBmp(Image1->Picture->Bitmap);
Image1->Refresh();
|
|
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 12 Nov, 2003 7:36 pm Asunto: |
|
|
Abusando tu sabidurioa y alguna forma para dejar en "tonos de grises" una imagen que este en un dbimage (para simular que esta deshabilitado)
Gracias de antemano _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 13 Nov, 2003 4:36 pm Asunto: |
|
|
Tendrías que crear un nuevo componente desde el TDBImage sobrescribiendo su método virtual "Paint", ya que lo que supongo que quieres es que los cambios solo afecten visualmente y no a la base de datos como ocurriría si cambias la imagen de manera normal.
Y una forma sencilla de convertir un bitmap a tonos de gris:
| Código: | void ColorToGray(Graphics::TBitmap* bmp)
{
bmp->PixelFormat = pf24bit;
for (int y = 0; y < bmp->Height; y++)
{
RGBTRIPLE* pixel = static_cast<RGBTRIPLE*>(bmp->ScanLine[y]);
for (int x = 0; x < bmp->Width; x++, pixel++)
{
pixel->rgbtRed = pixel->rgbtGreen = pixel->rgbtBlue =
(pixel->rgbtRed + pixel->rgbtGreen + pixel->rgbtBlue) / 3;
}
}
} |
Ejemplo de uso:
| Código: | ColorToGray(Image1->Picture->Bitmap);
Image1->Refresh(); |
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 27 Feb, 2005 4:09 am Asunto: |
|
|
Estimado _Leo, como hacer una transicion de imagenes, tipo protector de pantalla sobre windows..
este codigo puede servir ?, o existe alguna otra manera, como el CombineRgn
saludos _________________
 |
|
| Volver arriba |
|
 |
|