bueno estuve viendo como trabjar con img... como en un picture dibujar en cierto pixel... y ese tipo de cosas q nunca habia hecho..
(la idea era tratar de hacer un juego) pero para eso falta todavia...
hice un par de programas "bobos" pero les dejo este q es el mas entretenido y muy simple para quien quiera aprender algo mas...
http://rapidshare.com/files/85333855/Capturas_de_pantalla.rar
el codigo es 100% mio.. no se si laguien ya hizo algo al estilo de este xD
SALUDOS
P/D: hice un programa tipo Paint.. pero no se como guardar lo q dibujo en el picture box... x favor si alguno me puede explicar o darme un manual donde se hacen este tipo de cosas.. ya q lo q fui haciendo fue todo probrando xD
ah y como se si ese pixel ya tiene algun color...
otra pregunta alguno tiene un code de esos jueguitos viejo...(de los primeros) en el q un pixel es un autito... y esta siempre quiero pero se mueve la pista... o algun code asi para ponerme a investigar.. en google no encuentro xD
Nunca he trabajado con algo así pero viéndolo por encima ¿porque no capturarlo como hicisteis en el evento load y actualizarlo?
Private Sub menuGuardar_Click()
foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 100
foto.SampleScreen
If ExisteArchivo("c:\Salvado.jpg") = True Then _
Kill "c:\Salvado.jpg" 'Necesario eliminarlo, sino no salva :-[
foto.SaveFile ("c:\Salvado.jpg")
'Lo vuelvo a cargar, para verificar que guardo, ¡pero no es necesario!
Picture1.Picture = LoadPicture("c:\salvado.jpg")
End Sub
Private Sub menuSalir_Click()
Unload Me
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 2 Then 'Si se presiono el boton derecho del mouse
PopupMenu Menu
'Esquema del menu
'---------------------------
'Menu --> Menu
'Guardar --> menuGuardar
'Salir --> menuSalir
'---------------------------
End If
End Sub
'Esta es la función más sencilla para detectar la existencia de un archivo
Public Function ExisteArchivo(Archivo As String) As Boolean
ExisteArchivo = IIf(Dir$(Archivo) = "", False, True)
'Devolverá false, si Dir$ no encuentra el archivo especificado
End Function
Con un PopupMenu con las opciones guardar y salir, lo demás es... ¡claro! se podria ahorrar código creando una rutina para la captura de pantalla, y así llamarla cada vez que se necesite, en el load y en guardar como es este el caso ¡por ejemplo!. Por el momento no os puedo seguir ayudando por falta de tiempo, después pruebo lo demás y si lo deseáis os sigo ayudando.
Pd: tambien seria necesario usar commondialog para guardar, y así no sustituir siempre la captura anterior.
¡S4lu2!
Nas compas. La verdad es que os llevo leyendo algún tiempo esporadicamente y es la primera vez que intento ayudar. Espero que sirva de algo mi ignorancia. Mira...respecto a lo de saber el color de un pixel en un objeto picturebox mira lo que pone el msdn:
Devuelve, como un valor de tipo Integer Long, el color rojo-verde-azul (RGB) delpunto especificado de un objeto Form o un control PictureBox. No aceptaargumentos con nombre.
Sintaxis
objeto.Point(x, y)
La sintaxis del método Point consta de las siguientes partes:
Parte Descripción
objeto Opcional. Unaexpresión de objeto que da como resultado un objeto de la lista Se aplica a. Si se omite objeto, se supone que el objeto es el objeto Form que tenga elenfoque.
x, y Requerido. Valores de precisión simple que indican las coordenadas horizontal (eje x) y vertical (eje y) del punto según la propiedad ScaleMode del objeto Form o el control PictureBox. Deben colocarse entre paréntesis.
Comentarios
Si el punto definido por las coordenadas x e y está fuera del objeto, el método Point devuelve -1.
Vamos...que sería color=picturebox1.point(x,y).
Por supuesto tendrías que tener la propiedad Scalemode del objeto picturebox igual a vbpixels o 3 para que la unidad de medida de las coordenadas fuesen pixeles.
Te remiendo que utilices esto, ya que el vb nos lo facilita. Pero para aportar más, también está la api getpixel:
Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Esta api también devuelve el color del pixel del objeto. En hdc tendrías que poner picturebox1.hdc y en x e y pues ya sabes :).
Para hacer juegos te recomiendo que empices mirandote las apis de la libreria gdi32, que son de manejo de gráficos. Luego si te quieres meter en un embolado, mirate la libreria de, por ejemplo, los directX, aunque hay por ahi librería más intuitivas (creo recordar que en su día de los que más me gusto fue revolution3d por ejem):
http://www.revolution3d.net/cms/index.php?option=com_frontpage
Aunque no lo toqué apenas. Pero lo que te digo, si te quieres meter en camisa de once baras, te calientas el coco con la api de directx y punto, que los directx estas instalados en todos los win :).
Y sobre juegos en vb.....pues en su día si había por la web, busca que seguro que encuentras. Mira en esta pagina:
http://www.planet-source-code.com/vb/default.asp?lngWId=1
En la parte de abajo verás dos apartados que pueden que te interesen: Games y Graphics. Busca.
Había un juego parecido al arkanoid hecho totalmente en vb tirando a tope de apis llamado ArkX. Buscalo, es bastante interesante.
Yo mismamente hace años, intenté hacer el típico juego de las dos raquetas y la pelota (el de la atari 2600 :)). Al final casi lo acabé. Está por ahí perdido, pero si te interesa lo intento buscar y mandar. Tiene fallos pero la programación es bastante facil de entender.
Y si os interesa pego un curso de metodos gráficos en vb6 (solo sus funciones, procedimientos y propiedades, nada de apis) que hace tiempo bajé de una pagina.
Bueno, espero haber ayudado en algo. A ver si vuelvo a programar algo.
P.D. Si quieres hacer juegos, a lo mejor te gustaría saber que hay lenguajes especificos para eso, lo mismo te interesan (Ejem. DarkBasic, BlitzBasic). Yo mismo tuve una pequeña época de Game Dev Studio :). Pero si te pones con vb y alguna librería puedes hacer maravillas ;).
chefito muchas gracias x la info! ya la voy a leer mas detenidamente...
y C@ss¡@n¡... la programa q yo me referia es otro... mira pongo el code tb asi lo ven... y lo q quiero es guardar lo q dibujo en el picturebox...
http://rapidshare.com/files/85477201/Dibujos.rar
en ese proyecto es donde quiero guardar el archivo...
SALUDOS
CitarC@ss¡@n¡... la programa q yo me referia es otro...
¡Ups! en ese caso mirad esto:
Private Sub CmdGuardar_Click()
With CommonDialog1
.DialogTitle = "Guardar el archivo"
.Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*"
.ShowSave
If .FileName = "" Then
MsgBox "No se especificó ningún nombre", vbCritical
End If
Picture1.Picture = Picture1.Image
SavePicture Picture1, .FileName
End With
End Sub
Private Sub Form_Load()
Picture1.AutoRedraw = True
End Sub
Implementa eso a tu proyecto y seguro que funciona, no olvides el
AutoRedraw del PictureBox a True es fundamental.
Bueno... ¡S4lu2!
Un pequeño aporte para cuando canceles o cierres el cuadro de dialogo no se grabe la imagen:
Private Sub CmdGuardar_Click()
With CommonDialog1
.DialogTitle = "Guardar el archivo"
.Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*"
.ShowSave
If .FileName = "" Then
MsgBox "No se especificó ningún nombre", vbCritical
End If
If not(.CancelError) then SavePicture Picture1.Image, .FileName
End With
End Sub
Private Sub Form_Load()
Picture1.AutoRedraw = True
End Sub
Por cierto, otro apunte. Si quieres que no se te produzcan esos espacios a causa de utilizar el pset utiliza el line con alguna modificación en tu programa. Según me dijo un amigo sabio en vb hace mucho tiempo, los programas de dibujo hacen esto para no dejar espacios. Pon esto en tu código:
Declara esto:
Dim X1 As Integer, Y1 As Integer
Y sustituye los procedimientos siguientes:
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Picture1.PSet (X, Y), Color
X1 = X
Y1 = Y
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static X2 As Integer, Y2 As Integer
If Button = 1 Then
X2 = X
Y2 = Y
Picture1.Line (X1, Y1)-(X2, Y2), Color
X1 = X2
Y1 = Y2
End If
End Sub
Quita el procedimiento Picture1_MouseUp que no sirve para nada ;)
Si no entiendes algo dilo....si no soy yo alguien te lo aclarara.
muchas gracias x los codes.. en serguida los pruebo...
el de chefito no me funciona :(
gracias de todos modos ;)
SALUDOS
Mmmmmmm.....como que no te funciona? Pero si te lo di mascado! :)
Haber sustituye la declaración tuya del principio:
Dim Color As ColorConstants
por
Dim Color As ColorConstants, X1 As Integer, Y1 As Integer
y sustituye los dos procedimientos del final de tu código:
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Picture1.PSet (X, Y), Color
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then Exit Sub
Picture1.PSet (X, Y), Color
End Sub
por esto:
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Picture1.PSet (X, Y), Color
X1 = X
Y1 = Y
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim X2 As Integer, Y2 As Integer
If Button = 1 Then
X2 = X
Y2 = Y
Picture1.Line (X1, Y1)-(X2, Y2), Color
X1 = X2
Y1 = Y2
End If
End Sub
Y esto funciona perfectamente.
Cita de: Chefito en 21 Enero 2008, 23:22 PM
Un pequeño aporte para cuando canceles o cierres el cuadro de dialogo no se grabe la imagen:
Private Sub CmdGuardar_Click()
With CommonDialog1
.DialogTitle = "Guardar el archivo"
.Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*"
.ShowSave
If .FileName = "" Then
MsgBox "No se especificó ningún nombre", vbCritical
End If
If not(.CancelError) then SavePicture Picture1.Image, .FileName
End With
End Sub
Private Sub Form_Load()
Picture1.AutoRedraw = True
End Sub
En ese sentido, para que sea completamente correcto seria necesario agregarle:
.CancelError = True
porque de la manera actual, entra en el siguiente bloque, canceles o no...
If not(.CancelError) then SavePicture Picture1.Image, .FileName
Por otro lado:
Citarah y como se si ese pixel ya tiene algun color...
Aunque ya la respondieron correctamente, os dejo un ejemplo sencillo, podes trabajarlo con los valores hexadecimales que devuelve:
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'Ejemplo... ;-]
Me.Cls
Me.BackColor = Picture1.Point(X, Y)
Me.Caption = "Valor hexadecimal del color: " & Hex(Me.BackColor)
End Sub
Creo que eso es todo... ¡S4lu2! y suerte en lo que haces... :o
¡Sin dejar escapar algo! :rolleyes: tratando imprevistos...
Private Sub CmdGuardar_Click()
On Error Resume Next
Dim Resp As String
With CommonDialog1
.CancelError = True 'Esto hará que VB devuelva un error al pulsar Cancelar
.FileName = "Nuevo Imagen de mapa de bits"
.Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*"
.ShowSave
'Si no se ha producido ningún error, es que NO se ha pulsado Cancelar
If Err.Number = 0 Then
If .FileName <> "" Then
If ExisteArchivo(.FileName) Then
If MsgBox("El archivo ya existe," & vbCrLf & _
"¿desea sobreescribirlo?" _
, vbQuestion + vbYesNo) = vbYes Then _
SavePicture Picture1.Image, .FileName
Else
SavePicture Picture1.Image, .FileName
End If
End If
End If
End With
'-------------------------->> Control de Errores <<------------------------------
'Es buena costumbre volver a ponerlo a cero... así dejamos de detectar errores
Err = 0 'cancelamos el error/ 0 es que no hay error
On Local Error GoTo 0 'sirve si queremos dejar de detectar errores
End Sub
Public Function ExisteArchivo(Archivo As String) As Boolean
On Error Resume Next
ExisteArchivo = IIf(Dir$(Archivo) = "", False, True)
End Function
¡S4lu2!
Jajajaja....como sigamos asi, veo que hacemos el programa entero :P
Cita de: Chefito en 22 Enero 2008, 20:20 PM
Jajajaja....como sigamos asi, veo que hacemos el programa entero :P
Ja, ja, parece que si... ¡que locura! :xD
Existe algo llamado
BUSCADOR y buscabas como hacer un Paint hubieses encontrado porque esto ya se hablo y ensima yo hice y postee como respuesta el MiniPaint. Aunque lo de ustedes esta bueno tambien!
http://rapidshare.com/files/43341754/MiniPaint.rar (http://rapidshare.com/files/43341754/MiniPaint.rar)
Sancho.Mazorka :¬¬