Sección de tutoriales y manuales vb
Sección que explica los aspectos básicos del uso del los métodos PaintPicture, LoadPicture y SavePicture de visual basic , que permiten leer , guardar , dibujar y copiar gráficos e imágenes
Esta función se utiliza para cargar una imagen o gráfico en un control Form, PictureBox o Image.
Esta función requiere como parámetro obligatorio, el path del archivo de imagen a cargar en el objeto.
Por ejemplo lo siguiente carga un gráfico en un control PictureBox:
Picture1.Picture = LoadPicture("c:\archivo.bmp")
Lo mismo sería para un control Image o Formulario, o cualquier objeto que soporte la carga de un archivo de imagen de formato compatible a las que soporta Visual basic ( BMP, JPG, GIF, WMF, algunos ICO etc..) , no así los archivos PNG o TIFF por ejemplo, ya para estos últimos habría que utilizar el Api de windows o algún componente externo, para poder leerlos.
Nota: En este enlace hay un Módulo de clase que permite visualizar gráficos e imágenes de tipo PNG
Para cargar en un control Image:
Image1.Picture = LoadPicture("c:\archivo.bmp")
Para cargar en un Form:
El_Formulario.Picture = LoadPicture( La ruta)
También hay otras propiedades de algunos controles, que requieren por lo general el uso de esta función para cargar un archivo gráfico a dicha propiedad, como es el caso de:
La propiedad Icon de los formularios. La propiedad MouseIcon para establecer un icono personalizado al mouse. La propiedad DragIcon que permite establecer el icono que se va a mostrar como puntero en una operación de arrastrar y colocar, y algunas otras.
lo siguiente establece un archivo de ícono al puntero del Mouse para el formulario:
Me.MousePointer = vbCustom
Me.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Para establecer el ícono en un control TextBox:
Text1.MousePointer = vbCustom
Text1.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Además de los controles, se pueden cargar archivos con la función LoadPicture, por ejemplo en los siguientes tipos de variables: IPictureDisp, Picture stdPicture.
Aclarar que al cargar un gráfico en la variable, se debe establecer con la instrucción Set, por ejemplo:
Dim La_Imagen As Picture Set La_Imagen = LoadPicture("c:\windows\plumas.bmp") Picture1.Picture = La_Imagen
Lo anterior carga en el la variable " La_Imagen " el archivo gráfico, y luego se puede pasar dicha variable a un objeto que tenga la propiedad Picture, en este caso se paso un control Picture1.
Para eliminar de la memoria la variable, se utiliza el valor Nothing también con la instrucción Set , por ejemplo:
If Not La_Imagen Is Nothing Then
'Descarga la variable de la memoria
Set La_Imagen = Nothing
End If
Capturar el error 53.
Cuando cargamos un archivo con la función, y el path del archivo no existe, es decir que no se encuentra el fichero, se produce el error 53.
Un ejemplo para capturar el error:
On Error GoTo errSub
Picture1.Picture = LoadPicture(Ruta)
Exit Sub
'Error
errSub:
If Err.Number = 53 Then
MsgBox "No se puede cargar el archivo, verifique la ruta", vbCritical
End If
Este método lo que hace es guarda en un archivo en disco, un gráfico cargado en un control Form, PictureBox o un control Image.
Este posee dos parámetros, uno que especifica el Objeto Picture, y otro la ruta del archivo a generar
Savepicture Picture As IPictureDisp,FileName as String
Su uso es muy simple. A continuación una serie de ejemplos:
Esto lo que es cargar en un control Image, un gráfico del disco, y luego mediante otro botón, utilizando un control CommonDialog, guarda el archivo cargado en el Image en la ruta especificada:
Colocar un Control CommonDialog1, un control Image1 y dos controles CommandButton, Command1 y Command2:
Código en el formulario:
'Botón que carga el el archivo de imagen en el control Image Private Sub Command1_Click() On Error GoTo errSub With CommonDialog1 .DialogTitle = "Seleccionar un archivo" .Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*" .ShowOpen If .FileName = "" Then Exit Sub Image1.Picture = LoadPicture(.FileName) End With Exit Sub 'Error errSub: If Err.Number = 53 Then MsgBox "No se puede cargar dicho archivo, verifique la ruta", vbCritical End If End Sub 'Botón que guarda el contenido del control Image en un nuevo archivo Private Sub Command2_Click() With CommonDialog1 .DialogTitle = "Guardar el archivo" .Filter = "Todos los Archivos|*.*" .ShowSave If .FileName = "" Then MsgBox "No se especificó ningún nombre", vbCritical End If If Image1.Picture <> 0 Then SavePicture Image1.Picture, .FileName Else MsgBox "No hay un gráfico cargado para poder guardar", vbExclamation End If End With End Sub Private Sub Form_Load() Command1.Caption = "Abrir" Command2.Caption = "Guardar" End Sub
Este otro ejemplo, guarda el contenido del portapapeles de windows, en un nuevo archivo de tipo BMP.
Nota, debe haber una imagen válida en el ClipBoard, si no dará error. Para probar, se puede copiar al portapapeles la imagen de la pantalla presionando la tecla Print Screen, y luego ejecutar el siguiente código para generar el archivo
If Clipboard.GetFormat(vbCFBitmap) = True Then
'Guarda la imagen
SavePicture Clipboard.GetData(vbCFBitmap), "c:\Archivo.BMP"
Else
'Error: no coincide el Formato
MsgBox "La imagen del portapales no es válida", vbCritical, "No se pudo guardar"
End If
El método PaintPicture permite dibujar el contenido de un archivo de gráficos en un Formulario, en un PictureBox o un objeto Printer.
El_objeto.PaintPicture La_Imagen, x1, y1, Ancho1, Alto1, x2, y2, Ancho2, Alto2, Opecode
El_Objeto:
Es como se comentó, donde vamos a dibujar el gráfico, puede ser un form, un picture o en el objeto Printer
La_Imagen
Este parámetro es de tipo StdPicture, y es la imagen a dibujar. Los formatos pueden ser un archivo Gif, Bmp, Jpg, Wmf, Dib, Ico . Esta imagen puede estar cargada en un control, por ejemplo en un Picture, Form, Image, o también en una variable de tipo StdPicture, IpictureDisp o de tipo Picture. Ver mas adelante un ejemplo de esto último de como utilizar gráficos cargados en variables
X1 e y1:
Son las coordenadas de destino, es decir la posición Izquierda y Arriba ( Left - Top ), donde se presentará la imagen a dibujar en el objeto destino
Ancho1 y Alto1:
Estos parámetros especifican el ancho y alto que tendrá la imagen a dibujar. Estos parámetros son opcionales, y si se omiten, la imagen se dibujará en el objeto con las dimensiones que tenga.
x2 e y2 :
Son las coordenadas a tomar en la imagen, es decir es la zona de recorte de la misma. Con estos parámetros podemos copiar un trozo del gráfico, si se omite, ya que es opcional, se toma la imagen completa.
Ancho1 y Ancho2:
Al igual que x2 e y2 son opcionales, y determinan el ancho y alto de la imagen en el objeto destino
Cargar en un control PictureBox un gráfico. Luego al presionar un command1, se copiará la imagen del Picture en el formulario.
El código del CommandButton sería:
Private Sub Command1_Click()
'Copia el gráfico en el formulario
Me.PaintPicture Picture1.Picture, 0, 0
End Sub
Como se ve en el código, indicamos que copie la imagen del picture1 en el formulario, es decir en el primer parámetro le pasamos la propiedad Picture del control. Luego, se indica la posición izquierda y Arriba ( Left - Top ) en el objeto destino, en este caso el Form. Los demás parámetros son opcionales, y como en este caso se omitieron, la imagen se copiará con las dimensiones que tenga, es decir una copia exacta.
Si en cambio en ves de especificar 0 para x y 0 para y, le especificaríamos 500, y 500, el resultado sería el siguiente:
Importante. Los valores para las dimensiones y posiciones del método PaintPicture, ya sea para las coordenadas x1, y1, ancho1, alto1, ancho2 y alto2, depende de la propiedad ScaleMode del objeto destino. En el ejemplo anterior, se asume que se copió en la posición izquierda y Top, usando Twips como medida, por lo que si haces la prueba y cambias la propiedad ScaleMode del formulario, por ejemplo a vbPixels, la imagen se copiará tomando dicho modo de escala, es decir en pixeles. Lo mas común, es trabajar con pixeles, es mas cómodo.
Este ejemplo es igual al anterior, pero se utilizarán cuatro controles TextBox para indicar la posición x1, y1, ancho1 y ancho2.
Nota: el código no tiene una rutina de error para comprobar que algunos valores sean correctos, es decir si por ejemplo colocamos un valor que no sea numérico, dará error. también se producirá un error en tiempo de ejecución , si pasamos a PaintPicture, en Ancho1 y Alto1, el valor 0
Código fuente en el formulario:
Private Sub Command1_Click() 'Limpia el contenido del formulario Me.Cls 'Copia el gráfico en el formulario con los valores Me.PaintPicture Picture1.Picture, CSng(Text1), _ CSng(Text2), _ CSng(Text3), _ CSng(Text4) End Sub Private Sub Form_Load() ' Modo de escala del formulario en pixeles Me.ScaleMode = vbPixels End Sub
Lo siguiente copia el gráfico cargado en un PictureBox llamado Pic_Origen, a otro PictureBox llamado Pic_Destino.
Private Sub Command1_Click()
'Copia el gráfico con el ancho y alto que tenga _
Pic_Destino
Pic_Destino.PaintPicture Pic_Origen, 0, 0, _
Pic_Destino.ScaleWidth, _
Pic_Destino.ScaleHeight
End Sub
Como se ve, en los parámetros que especifican el alto y ancho, se pasó las dimensiones que tenga Pic_destino, ( ScaleWidth y ScaleHeight )
Para dibujar una imagen centrada, por ejemplo en un formulario, podemos cargar la misma en una variable, como se comentó antes, que sea de tipo Picture, IpictureDisp o StdPicture, y luego pasarla como parámetro a PaintPicture, y en los parámetros X1 e Y1 ( posición Left y Top ) lo siguiente :
'Variable de tipo Picture para cargar mediante LoadPicture en _ tiempo de ejecución un gráfico Dim Una_Imagen As Picture Private Sub Command1_Click() Dim Pos_x As Single Dim Pos_y As Single 'Limpia el formulario Me.Cls 'Carga en la variable la imagen Set Una_Imagen = LoadPicture("c:\bart.jpg") ' Obtiene la posición x e y para centrar la imagen Pos_x = (Me.ScaleWidth - ScaleX(Una_Imagen.Width, vbHimetric, vbPixels)) / 2 Pos_y = (Me.ScaleHeight - ScaleY(Una_Imagen.Height, vbHimetric, vbPixels)) / 2 ' Dibuja el gráfico centrado en el formulario Me.PaintPicture Una_Imagen, Pos_x, Pos_y End Sub Private Sub Form_Load() ' Modo de escala en pixeles Me.ScaleMode = vbPixels Me.Caption = " Dibujar imagen centrada " End Sub Private Sub Form_Unload(Cancel As Integer) 'Elimina la imagen/Variable If Not Una_Imagen Is Nothing Then Set Una_Imagen = Nothing End Sub
El resultado al presionar el commandButton sería algo por el estilo:
En el código anterior, se declara una variable de tipo Picture para almacenar el gráfico mediante la función LoadPicture. Pero como es una variable de objeto, se debe utilizar la palabra clave Set.
También como se comentó, el gráfico a cargar debe ser un formato de imagen de los que soporta visual basic: bmp, gif, jpg etc... , no asi los Png o los tif por decir algunos.
Luego en Pos_x y Pos_y se calcula el centro del formulario, restando al ancho del form, el ancho de la imagen dividido por 2
Nota: La propiedad Width y Height de la imagen, no devuelve un valor en pixeles, si no en una medida llamada Himetric. Por ese motivo se utiliza la función Scalex y Scaley para convertir el valor de dicha escala a pixeles, ya que en el FormLoad se estableció el modo de escala del Formulario, que en este caso es donde se va a dibujar, en vbPixels. Aclaro que no se si es la única forma de convertir esto, pero al menos es la que conozco.
Ahora se ve un ejemplo para ver estos parámetros opcionales que no se vieron en los ejemplos anteriores, y que los mismos permiten seleccionar partes de la imagen a copiar en el objeto destino, es decir un área específica. Si no se entiende demasiado, seguro viendo la siguiente imagen se aclara un poco el tema:
Para el ejemplo colocar un Picture llamado Pic_Origen y cargarle un gráfico. Agregar otro PictureBox llamado Pic_Destino. También Cuatro TextBox en un arreglo:
Text1(0), Text1(1), Text1(2) y Text1(3), para la posición x, posición y, para el ancho ancho y alto respectivamente.
Estos valores serán en pixeles, y esos mismos valores se utilizarán para la función PaintPicture para dibujar dicha área
Código fuente en el formulario:
Option Explicit Private Sub Dibujar_Imagen(x As Single, y As Single, _ ancho As Single, alto As Single) ' Limpia - Borra los dos picture Pic_Destino.Cls Pic_Origen.Cls 'dibuja el cuadrado en el Picture Origen Pic_Origen.Line (x, y)-Step(ancho, alto), vbRed, B 'Dibuja la porción de imagen en Pic_Destino Pic_Destino.PaintPicture Pic_Origen.Picture, 0, 0, , , x, _ y, _ ancho, _ alto End Sub Private Sub Form_Load() ' Escala en pixeles para los dos Picture Box Pic_Destino.ScaleMode = vbPixels Pic_Origen.ScaleMode = vbPixels 'Para que al dibujar con Line y PaintPicture mantenga la imagen Pic_Origen.AutoRedraw = True Pic_Destino.AutoRedraw = True 'algunos valores iniciales Text1(0) = 10 Text1(1) = 10 Text1(2) = 50 Text1(3) = 50 End Sub Private Sub Text1_Change(Index As Integer) On Local Error Resume Next 'Llama a la sub que dibuja con PaintPicture Call Dibujar_Imagen(CSng(Text1(0)), _ CSng(Text1(1)), _ CSng(Text1(2)), _ CSng(Text1(3))) End Sub
El ejemplo anterior, al colocar valores en los TextBox para los ejes x e y, el ancho y alto, se dibuja mediante el método Line el recuadro ( área ) en el picture origen, luego se le pasan esos mismos valores a la función PaintPicture que dibuja esa porción de imagen en el otro PictureBox
El siguiente ejemplo es similar al anterior, con la diferencia de que se captura un área de un gráfico cargado en un picture, y se dibuja en otro picturebox, pero estirando la imagen como si fuese un zoom. Para capturar el área se utiliza un shape que se posiciona al mover el puntero del mouse sobre el picture que tiene la imagen:
Colocar dos PictureBox y un control shape. A un Picture renombrarlo a Pic_Origen y cargarle un gráfico. Al otro picture renombrarlo a Pic_destino que es donde se copiará la porción de la imagen. El shape dejarlo con el nombre Shape1
Código fuente en un formulario
Option Explicit Dim Ancho As Single Dim Alto As Single Private Sub Form_Load() ' Algunas propiedades para el shape With Shape1 .Width = 500 .Height = 500 .BorderWidth = 2 .BorderColor = vbRed 'Coloca el shape dentro de Pic_Origen Set .Container = Pic_Origen End With Ancho = Shape1.Width Alto = Shape1.Height End Sub Private Sub Pic_Origen_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Mueve el Shape en el centro del puntero del mouse Shape1.Move X - Ancho / 2, Y - Alto / 2 'Dibuja en Pic_Destino Pic_Destino.PaintPicture Pic_Origen, 0, 0, _ Pic_Destino.ScaleWidth, Pic_Destino.ScaleHeight, _ (X - Ancho / 2), (Y - Alto / 2), Ancho, Alto End Sub
Este es un simple código fuente que utiliza la función PaintPicture para dibujar un gráfico JPG para el fondo del formulario y otra imagen para un picbox alineado en la parte superior.
En este caso , se dibuja el fondo en los eventos Resize del formulario y del picturebox superior que actúa como simple menú de opciones.
Nota: En este enlace podés ver un ejemplo simple que hice de como hacer un Scroll en un gráfico mediante la función PaintPicture, para desplazar la imagen cuando la misma es superior ( Alto y ancho ) al contenedor, es decir a al PictureBox o Formulario
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar