|
Página 1 de 1
|
Acceso Mixto A Librerias EXTERNAS En C
Autor |
Mensaje |
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Acceso Mixto A Librerias EXTERNAS En C
La pregunta va dirigida a todos, pero mas al querido Vuott quien habra picado con la carnada que le puse en el titulo
Es posible acceder de manera mixta a una libreria que YA este implementada en gambas, pero de manera incompleta?
Por ejemplo tenemos Gb.OpenGL , pero hay funciones de OpenGL que no estan traducidas en gambas. Un ejemplo seria asi:
=================== "Los IF son mas rápidos" - autor anónimo
|
#1 Sabado, 16 May 2020, 13:03 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Acceso Mixto A Librerias EXTERNAS En C
En términos generales, sí.
Un enorme problema, pero, surge si se tiene que compartir un handle.
Por ejemplo en tu simple caso en efecto no hay handle que compartir en común.
última edición por vuott el Sabado, 16 May 2020, 18:10; editado 2 veces
|
#2 Sabado, 16 May 2020, 17:29 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Acceso Mixto A Librerias EXTERNAS En C
vuott escribió: En términos generales, sí.
Un enorme problema, pero, surge si se tiene que compartir un handle.
Por ejemplo en tu simple caso en efecto no hay handle que compartir en común.
supongamos que tenemos que compartir una imagen que esta en memoria o el Device Context donde esta operando GL de Gambas
en fin, habria que hacer alguna prueba.
=================== "Los IF son mas rápidos" - autor anónimo
|
#3 Sabado, 16 May 2020, 18:54 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Acceso Mixto A Librerias EXTERNAS En C
tercoIDE escribió: Un enorme problema, pero, surge si se tiene que compartir un handle.
Exemplum clarissimum (hace falta activar el Componente gb.cairo):
Library "libcairo:2"
' cairo_t* cairo_create(cairo_surface_t *target)
' Creates a new cairo_t with all graphics state parameters set to default values and with target as a target surface.
Private Extern cairo_create(target As Pointer) As Pointer
Public Sub Main()
Dim png As CairoSvgSurface
Dim cairo As Pointer
' Especifica la superficie gráfica (en mm) a crear para dibujar sobre ella:
png = New CairoSvgSurface(Null, 210, 297)
cairo = cairo_create(Object.Address(png))
End
última edición por vuott el Sabado, 16 May 2020, 21:39; editado 2 veces
|
#4 Sabado, 16 May 2020, 21:35 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Acceso Mixto A Librerias EXTERNAS En C
bien hecho, yo he intentado usar el mismo metodo con OpenGL y no lo logre
ahora se me ocurre otro desafio, 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
=================== "Los IF son mas rápidos" - autor anónimo
última edición por tercoIDE el Sabado, 16 May 2020, 22:03; editado 1 vez
|
#5 Sabado, 16 May 2020, 22:02 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Acceso Mixto A Librerias EXTERNAS En C
tercoIDE escribió: 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
En general, para leer o escribir en un flujo de memoria hace falta utilizar los recursos de Memory Stream.
En tu caso tienes que usar la Propiedad " .Data" del Objeto "Image" y el recurso Memory Stream para escribir nuevos datos en el flujo de la memoria que contiene los datos de la imagen.
Exemplum maximum (para este ejemplo hace falta activar los Componentes gb.image, gb.image.io, gb.net y gb.net.curl):
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
https://www.gambas-it.org/wiki/inde...i_Memory_Stream
última edición por vuott el Domingo, 17 May 2020, 15:47; editado 9 veces
|
#6 Domingo, 17 May 2020, 00:26 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Acceso Mixto A Librerias EXTERNAS En C
hice una pequeña app con tu codice
=================== "Los IF son mas rápidos" - autor anónimo
|
#7 Domingo, 17 May 2020, 04:05 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Acceso Mixto A Librerias EXTERNAS En C
vuott escribió: En términos generales, sí.
Un enorme problema, pero, surge si se tiene que compartir un handle.
Por ejemplo podemos pasar a funciones externas de C variables, que no sean Objetos " stricto sensu" de Clases de gambas, como las no estructuradas de tipos numérico; y podemos tambien Array, Estructuras, Punteros.
Imposible gestionar handle de librerias especificas, desde gambas a C y viceversa.
|
#8 Lunes, 18 May 2020, 01:10 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|