Resumen Cambiar el color de una Fotografia

-----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



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com