-----Mensaje original-----
De: Daniel López <Worldcia@redestb.es>
Para: Lista VB <vb-esp@ccc.uba.ar>
Fecha: Domingo, 21 de Marzo de 1999 06:37 a.m.
Asunto: (VB-ESP) Cambiar el color de una Fotografía
Alguien tiene algún tipo de idea de como podría cambiar el Color de una Fotografía con V.B., no con editores externos, cargar una Foto en un Picture Box y cambiarle los Colores a mi gusto.
Se me ocurre que podrías cargarlo en un control PictureBox y cambiar el color, aunque deberás hacer uso del ratón y algunas otras capacidades de edición. Definitivamente no podrás hacerlo con un control mágico ni nada por el estilo.
Crea un nuevo proyecto EXE Estándar y coloca los siguientes controles en el formulario:
* Dos Frame.
* Dos PictureBox.
* Dos CommandButton
* Un VScroll
* Un HScroll
* Un CommonDialog
* Un PictureBox (con la propiedad Index establecida en 0).
No importa dónde los coloques, tan sólo asegúrate de no mover las propiedades predeterminadas, excepto para Picture3 donde la propiedad Index la establecerás en 0. Esto es porque nos va a servir para una matriz de controles. Todo lo necesario para hacer funcionar a los controles se encuentra en el código. Asumo en el código que los controles se llamarán: Frame1, Frame2, Picture1, Picture2, Picture3(0), VScroll1, HScroll1, CommonDialog1, Command1 y Command2.
Copia y pega el siguiente código en el formulario. Funciona en Visual Basic 5 y superiores (haz las correcciones que sean necesarias debido a líneas divididas por el editor de e-mail):
*********************************************************
Option Explicit
Private Sub Command1_Click()
On Error Resume Next
With CommonDialog1
.CancelError = True
.DialogTitle = "Abrir archivo gráfico"
.Filter = "Archivos BMP (*.BMP)|*.BMP|" & _
"Archivos GIF (*.GIF)|*.GIF|" & _
"Archivos JPEG (*.JPG)|*.JPG|" & _
"Archivos ICO (*.ICO)|*.ICO|" & _
"Archivos WMF (*.WMF)|*.WMF"
.ShowOpen
If Err.Number = 0 Then
Picture1.Cls
Picture1.Picture = LoadPicture(.FileName)
DoEvents
HScroll1.Max = Frame2.Width - Picture1.Width
VScroll1.Max = Frame2.Height - Picture1.Height
HScroll1.Enabled = (Picture1.Width > Frame2.Width)
VScroll1.Enabled = (Picture1.Height > Frame2.Height)
End If
End With
End Sub
Private Sub Command2_Click()
On Error Resume Next
Picture1.Picture = Picture1.Image
Picture1.Refresh
DoEvents
With CommonDialog1
.CancelError = True
.DialogTitle = "Guardar archivo BMP"
.Filter = "Archivos BMP (*.BMP)|*.BMP"
.ShowSave
If Err.Number = 0 Then
SavePicture Picture1.Picture, .FileName
End If
End With
End Sub
Private Sub Form_Initialize()
Me.Caption = "Editor de imágenes"
End Sub
Private Sub Form_Load()
' Var
Dim i As Integer
' Arregla todo lo necesario en los controles
' Establece a quién le pertenece cada control secundario.
Set Picture3(0).Container = Picture2
Set Picture1.Container = Frame2
Set Frame2.Container = Frame1
Set VScroll1.Container = Frame1
Set HScroll1.Container = Frame1
' Coloca los botones de comando
' Command2 es el botón Guardar
With Command2
.Caption = "&Guardar"
.Move Me.ScaleWidth - (.Width + 60), _
Me.ScaleHeight - (.Height + 60), _
1215, 300
End With
' Command1 es el botón Abrir
With Command1
.Caption = "&Abrir"
.Move Me.ScaleWidth - (.Width + Command2.Width + 120), _
Me.ScaleHeight - (.Height + 60), _
1215, 300
End With
' Acomoda los Cuadros de dibujo
With Frame1
.Caption = ""
.Move 0, 0, Me.ScaleWidth, _
Me.ScaleHeight - (Command1.Height + 120)
.BackColor = QBColor(0)
End With
With Frame2
.Caption = ""
.Move 0, 0, Frame1.Width - 255, Frame1.Height - 255
End With
With VScroll1
.SmallChange = 10
.LargeChange = 240
.Move Frame1.Width - .Width, 0, 255, _
Frame1.Height - 255
End With
With HScroll1
.SmallChange = 10
.LargeChange = 240
.Move 0, Frame1.Height - .Height, _
Frame1.Width - 255, 255
End With
' Picture1 es el que tendrá la imagen
With Picture1
.Appearance = 0
.AutoRedraw = True
.AutoSize = True
.BorderStyle = 0
.Move 0, 0, Frame1.Width - VScroll1.Width, _
Frame1.Height - HScroll1.Height
End With
' Picture2 es el que contiene la paleta de colores
With Picture2
.Move 60, Command1.Top, _
Command1.Left - 120, Command1.Height
End With
' Ahora coloca los colores en la paleta
With Picture3(0)
.AutoRedraw = True
.BorderStyle = 1
.Appearance = 0
.Move 0, 0, Picture2.ScaleWidth / 16, _
Picture2.ScaleHeight
End With
' Genera los otros colores de la paleta
For i = 0 To 15
If i > 0 Then
Load Picture3(i)
Picture3(i).Move Picture3(i - 1).Left + _
Picture3(i - 1).Width
End If
Picture3(i).BackColor = QBColor(i)
Picture3(i).Visible = True
Next i
End Sub
Private Sub HScroll1_Change()
doMover
End Sub
Private Sub HScroll1_Scroll()
doMover
End Sub
Private Sub Picture1_MouseMove(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
If Button And vbLeftButton Then
Picture1.PSet (X, Y)
End If
End Sub
Private Sub Picture3_Click(Index As Integer)
Picture1.ForeColor = QBColor(Index)
Frame1.BackColor = QBColor(Index)
End Sub
Private Sub VScroll1_Change()
doMover
End Sub
Private Sub VScroll1_Scroll()
doMover
End Sub
Private Sub doMover()
Picture1.Move HScroll1.Value, VScroll1.Value
End Sub
**************************************************************
El proceso central para guardar tus cambios se encuentra en el evento Command2_Click. Ejecuta el programa. Aunque es demasiado sencillo, sí te puede dar una pauta para el trabajo con gráficos y fotografías.
Si el código te provoca algunos problemas, con gusto te enviaría el programa original. Sólo que está hecho en VB6.
+---¡Saludos desde México!--+
| .+'~~'+. |
| * Tron * David.BAS |
| `+,__,+' |
+---------------------------+
http://www.spin.com.mx/~adgarza
adgarza@spin.com.mx