https://foro.gambas-es.org/viewtopic.php?f=4&t=8050&p=48509#p48509
-----------------------------------
vuott
Domingo, 17 May 2020, 00:26

Re: Acceso Mixto A Librerias EXTERNAS En C
-----------------------------------
[quote user="tercoIDE" post="48508"]dibujar una linea en una imagen en memoria, pero sin usar ninguna herramienta como cairo o paint, simplemente escribir en los bytes ARGB que representan la imagen[/quote]
En general, para leer o escribir en un flujo de memoria hace falta utilizar los recursos de [i][color=#A50000]Memory Stream[/color][/i].
En tu caso tienes que usar la Propiedad "[i].Data[/i]" del Objeto "Image" y el recurso [i]Memory Stream[/i] para escribir nuevos datos en el flujo de la memoria que contiene los datos de la imagen.

[i]Exemplum maximum[/i] (para este ejemplo hace falta activar los Componentes [i]gb.image[/i], [i]gb.image.io[/i], [i]gb.net[/i] y [i]gb.net.curl[/i]):

[code linenumbers=false syntax=gambas]Private ht As New HttpClient As "HTTP"
Private stringa As String


Public Sub Main()
  
  With ht
' Envia una petición al Servidor para descargar los datos de la imagen :
    .URL = "https://foro.gambas-es.org/images/avatars/1496952105564e53f13da18.png"
    .Timeout = 15
' Descarga los datos de la imagen:
    .Get(Null, Null)
  End With
  
End

Public Sub HTTP_Read()  
     
 Dim sBuf As String  
    
' Va a leer el flujo de datos de la imagen:
   If Lof(ht) Then   
     Read #ht, sBuf, Lof(ht)
     stringa &= sBuf
   End If

End

Public Sub HTTP_Finished()
  
  Dim im As New Image
  
  Wait
  ht.Close
    
  ManuAgit(im.FromString(stringa))
  
End


Private Procedure ManuAgit(img As Image)
  
  Dim st As Stream
  Dim i As Integer
  
' Para escribir (o leer) en un flujo de datos en memoria, es necesario utilizar el tipo de datos "Stream":
  st = Memory img.Data For Write
  
' Edita la imagen con líneas verticales rojas:
  For i = img.W / 2 To (img.W * img.H * (img.Depth / 8)) - 1 Step img.W
    Seek #st, i 
    Write #st, 255 As Byte  '' R
    Write #st, 0 As Byte    '' G
    Write #st, 0 As Byte    '' B
    Write #st, 255 As Byte  '' A
  Next
  
  st.Close
  
  img.Save("/tmp/nueva_imagen.png", 100)
  
End[/code]


https://www.gambas-it.org/wiki/index.php?title=Modificare_i_colori_dei_pixel_di_un%27immagine_con_la_propriet%C3%A0_.Data_della_Classe_Image_ed_i_Memory_Stream


