https://foro.gambas-es.org/viewtopic.php?f=1&t=7473
-----------------------------------
Shell
Miercoles, 17 Abril 2019, 09:02

Paint. Crear Una Imagen Desde Cero
-----------------------------------
Buenos días!.

Estoy acostumbrado a crear una imagen dentro de un DrawingArea.
Pero, ¿ y si yo quiero crear una imagen sin dibujarla en el DrawingArea ?

Con Paint.Begin le podemos decir en que vamos a crear nuestro dibujo.

- Image
- Picture
- DrawinArea

Hasta ahora no sé como hacerlo con el tipo Image y el tipo Picture.

La forma tradicional, dibujar en un DrawingArea. 

[code linenumbers=false syntax=gambas]
Public Sub CrearCirculo()
    
  Paint.Brush = Paint.Color(Color.red)
  Paint.Arc(Pizarra.w / 2, Pizarra.H / 2, 80)
  Paint.Fill
  
End

Public Sub Pizarra_Draw()
  
  CrearCirculo

End[/code]

Pero y si hiciera algo como esto:

[code linenumbers=false syntax=gambas]
Private unaimagen As New Picture

Public Sub Form_Open()
  
  CrearCirculo
  
End

Public Sub CrearCirculo()
  
  Paint.Begin(unaimagen)
  Paint.Brush = Paint.Color(Color.red)
  Paint.Arc(Pizarra.w / 2, Pizarra.H / 2, 80)
  Paint.Fill
  Paint.End  
  
End
[/code]

De principio. No se esta grabando  a ningún lado.
No pretendo tampoco capturar el área de dibujo del DrawingArea.
De esa forma da "imagen incorrecta" o algo por el estilo. 

¿ Donde están las dimensiones ?.  :-D  :roll:

Bien. Algunos de los ejemplos lo que hace es cargar un archivo, lo retoca y luego lo graba.
Pero yo quiero crearlo de cero y grabarlo ya sea bien en un archivo o almacenarlo en una variable de un tipo imagen.  :-P

Hasta ahora solo he podido hacer con el formato svg.

[code linenumbers=false syntax=gambas]
Public Sub Form_Open()
  
  CrearUNaImagen()
  
End

Public Sub CrearUNaImagen()
  
  Dim hFile As File
  Dim hSvgImg As New SvgImage 
  
  If Exist(User.Home &/ "Imagem.svg") Then Kill User.Home &/ "Imagem.svg"
  hFile = Open "/tmp/SvgImg.svg" For Read Write Create
  Print #hFile, "<svg>"
  Print #hFile, "</svg>"
  hFile.Close()
  
  hSvgImg = hSvgImg.Load("/tmp/SvgImg.svg")
  hSvgImg.Width = 120
  hSvgImg.Height = 120
  Paint.Begin(hSvgImg)
  Paint.Brush = Paint.Color(Color.Red)
  Paint.Arc(60, 60, 50)
  Paint.Fill
  Paint.End
  hSvgImg.Save(User.Home &/ "Imagem.svg")
  
End
[/code]

De principio me encuentro que la imagen del circulo no esta centrada.
Pss..y parece que el archivo no esta cerrado...hay veces que administrador de archivo se queda pensando... :o 
( Que raro ).  :? 

Fijaros, queda así:

 [img]https://foro.gambas-es.org/files/images/768/imagencreada.png[/img]

Y como veís en el código, la imagen tiene sus dimensiones a 120 x 120 y el centro del ciculo es de 60, 60 con un radio de 50.
Y la aplicación que nos muestra la imagen. Nos esta diciendo que la imagen tiene 150 x 150!.. :shock:

Según nos dice Benoit.

[quote]
The SVG support of Qt has many bugs for years. I don't know if it will be better with Qt5.
[/quote]
 
¿ Saben como puedo hacerlo en un Picture o un Image ?. 
¿ En que formato se grabaría ?...¿ png, bmp, jpg ?... :shock:  
¿ Solo puedo usar svg ?  :( 

Saludos


-----------------------------------
Shell
Miercoles, 17 Abril 2019, 14:04

Re: Paint. Crear Una Imagen Desde Cero
-----------------------------------
Pues este lo hice con Image. :-D

[code linenumbers=false syntax=gambas]
Private unaimagen As Image

Public Sub Form_Open()
  
  unaimagen = New Image(Pizarra.W, Pizarra.H, Color.green, 0)
  CrearIimagen()
  
End

Public Sub CrearIimagen()
  
  Paint.Begin(unaimagen)
  Paint.Brush = Paint.Color(Color.red)
  Paint.Arc(Pizarra.W / 2, Pizarra.H / 2, 80)
  Paint.Fill
  Paint.End   
  unaimagen.Save(User.home &/ "Temporales/pruebaimagen.png")
  
End
[/code]

Tomé como referencia la medida del DrawingArea, pero es indiferente.
Os puse un color que os gusta mucho de fondo.  :mrorange: 
( Fijaros el efecto que hace al scrollear el mensaje ).  :twisted: 

 [img]https://foro.gambas-es.org/files/images/768/pruebaimagen.png[/img] 

Podía haber puesto de extensión jpg, pero usé png, ¿ será indiferente ?.   :? 

La instrucción de grabar la imagen tiene algún argumento más. como  imagen de calidad.

Pues si que es raro el efecto que hace.. :o 
Solo tenéis el scroll vertical...mmm..si queréis el horizontal tenéis que mover el monitor para los lados...pffffff... :twisted: 

Saludos


