Estoy explorando el uso, a través de Extern, de la librería MagickWand para ello me sirvo de un ejemplo alojado en la wiki del foro gambas-it.org.
https://www.gambas-it.org/wiki/index.php...mageMagick
Bien la pegunta es:
¿Como convertir la variable tipo Pointer "magickwand", que ya contiene un la imagen redimensionada, en una imagen en memoria que pueda usar gambas?
Ya que para el uso que deseo darle no es necesario que la imagen redimensionada sea guardada en el sistema de archivos.
Encontré que hay una
Struct de la siguiente forma:
C
size_t id
char name [MagickPathExtent]
Image * images
ImageInfo * image_info
ExceptionInfo * exception
MagickBooleanType insert_before
MagickBooleanType image_pending
MagickBooleanType debug
size_t signature
https://www.imagemagick.org/api/MagickWa...kWand.html
Pero no se como asignar el puntero a dicha estructura.
¿La imagen esta en "Image * images" ? en ese caso ¿Como la convierto en una
Image de gambas?
Este es el código modificado para usarlo como función, que no funciona:
GAMBAS
' Gambas module file
Library "libMagickWand-6.Q16:6.0.0"
Private Enum UndefinedFilter
= 0, PointFilter, BoxFilter, TriangleFilter, HermiteFilter,
HanningFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter,
CubicFilter, CatromFilter, MitchellFilter, JincFilter, SincFilter, SincFastFilter,
KaiserFilter, WelshFilter, ParzenFilter, BohmanFilter, BartlettFilter, LagrangeFilter,
LanczosFilter, LanczosSharpFilter, Lanczos2Filter, Lanczos2SharpFilter, RobidouxFilter,
RobidouxSharpFilter, CosineFilter, SplineFilter, LanczosRadiusFilter, SentinelFilter
' void MagickWandGenesis(void)
' Initializes the MagickWand environment.
' MagickWand *NewMagickWand(void)
' Returns a wand required for all other methods in the API.
' MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)
' Reads an image or image sequence.
' MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)
' Scales an image to the desired dimensions with a filter.
' MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)
' Writes an image or image sequence.
' MagickWand *DestroyMagickWand(MagickWand *wand)
' Deallocates memory associated with an MagickWand.
' void MagickWandTerminus(void)
' Terminates the MagickWand environment.
MagickWandGenesis()
magickwand = NewMagickWand()
bo = MagickReadImage(magickwand, jpg)
Error.
Raise("Impossibile caricare il file immagine !") Chiude(magickwand)
' Ridimensiona l'immagine:
MagickResizeImage(magickwand, 106, 80, LanczosFilter, 1.0)
bo = MagickWriteImages(magickwand, nuovofile, MagickTrue)
Error.
Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !") Chiude(magickwand)
w = magickwand
img = w.images
Chiude(magickwand)
' Libera la memoria e chiude la libreria "ImageMagick":
DestroyMagickWand(mw)
MagickWandTerminus()
(17-11-2022, 11:41)Shordi escribió: con un directorio con tropecientas fotos, si cambias de vista de lista detalle a iconos, verás que la miniatura se va rellenando poco a poco.
Efectivamente, el esta sobre la mesa esa opción, de hecho tengo algo armado en otro programa que extrae las imágenes de un PDF para ello uso la clase Task de gambas que funciona súper bien para esto que decís.
De todas manera quisiera saber si esta forma que uso es mejorable.
(17-11-2022, 11:32)gartumar2 escribió: ¿Cuanto "pesan" las imágenes antes de redimensionarlas?
Las imágenes son de unos 4Mb son fotos de teléfonos y cámaras.
Esto es para el programa
Photo organizer que hace un tiempo estoy desarrollando y en el feedback de Shordi y TercoIDE me instaron a que se puedan ver las fotos y se pueda buscar en una base de datos, así que acá estoy tratando de lograr el desafío.

El objetivo es mostrar unas miniaturas de las imágenes de un directorio d importación y también mostrar las imágenes del disco duro al buscar por fecha o por alguna otra restricción.
(17-11-2022, 12:04)gartumar2 escribió: PD. Efectivamente la activación del perfilado me deja a Gambas frito, se queda bloqueado en Loading profiling file...... hasta que explota. Con Gtk funciona bien.
si, correcto, hay que usar QT para que funcione. Antes funcionaba con GTK pero algo cambio.