Comunidad Gambas-es
Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. (/thread-1097.html)

Páginas: 1 2


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - Shell - 17-11-2022

Esto, ¿ conocéis la aplicación Lighttable que se incluye en las fuentes de Gambas ?. ( Anteriormente venía en los ejemplos ).
Si tenéis las fuentes de Gambas lo encontrareis en:

directorio_de_instalación_de_fuentes_de_gambas3/gambas/app/examples/Image

Para que funcione necesitáis:
- exiftool
- convert

No es que sea muy rápido pero no esta mal. Esta pensado de principio solo para los jpg y jpeg.
Se podía ver si funciona con los png , se añade la extensión en Main y el procedimiento ReadDir,
se crea un problema aquí a la hora de convertir "algunos" png.
 
[code]

Está dentro de Time1_Timer en el formulario FMain.

Saludos


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - tincho - 17-11-2022

(17-11-2022, 12:39)tercoide escribió: Ademas, podrías guardar las miniaturas como suelen hacer estos navegadores de archivos, con ello no tendrías que stretch-arlas  función que debe insumir algún tiempo.

El problema es que son muchísimas fotografías y tengo que estudiar la manera mas eficiente de generar estas miniaturas.

¿Y si uso las miniaturas que genera el explorador de archivos? puede ser viable, aprovechar lo que ya genero el sistema y no inventar la rueda, pero ya entramos en la diversidad de escritorios y puede variar la ubicación, el tipo etc. etc.


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - cogier - 17-11-2022

Si está cargando imágenes desde una carpeta, entonces considere el siguiente código. Tendrá que cambiar las dos primeras líneas. El uso de 'Stretch' no muestra bien las imágenes. Echa un vistazo a 'Picturebox.Mode', es mucho mejor.

Código:
sPath As String = User.Home &/ "Pictures/Capture"
sMyPics As String[] = ["IMG_2540.JPG", "IMG_2622.JPG", "IMG_2653.JPG", "IMG_2693.JPG"]

Public Sub Form_Open()

  With Me
    .Height = 400
    .Width = 1610
    .Padding = 5
    .Arrangement = Arrange.Horizontal
    .Center
  End With

  For iLoop As Integer = 0 To sMyPics.Max
    CanvasPic(sMyPics[iLoop])
  Next

End

Public Function CanvasPic(sFile As String)

  Dim hPB As PictureBox

  With hPB = New PictureBox(Me) As "PBs"
    .Height = 400
    .Width = 400
    .Mode = PictureBox.Contain
    .Padding = 5
    .Picture = Picture.Load(sPath &/ sFile)
  End With

End

[Imagen: PictsInARow.png]


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - tincho - 17-11-2022

(17-11-2022, 17:25)cogier escribió: .Mode = PictureBox.Contain

Me gusta esto, voy a probarlo.

Por cierto, hermosos paisajes los de las fotografías.


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - vuott - 17-11-2022

(17-11-2022, 12:47)tincho escribió: Encontré que hay una Struct de la siguiente forma:
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

Este es el código modificado para usarlo como función, que no funciona:

Solo por curiosidad:

- "size_t" es un Long = 8 byte
- "char name [MagickPathExtent]": "char" es un Byte y "MagickPathExtent" es una Constante simbólica = 4096;
- "Image * " es un Puntero;
- "ImageInfo * " es un Puntero;
- "ExceptionInfo * "  es un Puntero;
- "MagickBooleanType" es un Enumeración, y es un Entero = Integer.

Por lo tanto y solo por curiosidad Big Grin , escribiría la Estructura de la siguiente manera:
Código:
Private Const MagickPathExtent As Integer = 4096


Public Struct Swand
  id As Long
  char[MagickPathExtent] As Byte
  images As Pointer
  image_info As Pointer
  exception As Pointer
  insert_before As Integer
  image_pending As Integer
  bdebug As Integer
  signature As Long
End Struct

(17-11-2022, 19:24)vuott escribió: Pero no se como asignar el puntero a dicha estructura.

El wiki italiano vuelve para ayudarte:

https://www.gambas-it.org/wiki/index.php/Dereferenziare_senza_Memory-Stream_un_pointer_ad_una_Struttura,_passato_da_una_funzione_esterna


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - tincho - 17-11-2022

(17-11-2022, 19:24)vuott escribió: escribiría la Estructura de la siguiente manera:

Gracias Vuott, probare así a ver como va.


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - tincho - 18-11-2022

(17-11-2022, 14:53)Shell escribió: Shell "convert -define jpegConfusedize=150x150 '" & aPFiles[i] & "' -auto-orient -thumbnail 128x128 '" & aThumbs[i] & "'" Wait[/i][/i]

Bueno no se si probaste esto en tu sistema pero en el mio me arruino las fotos que use para hacer el test. asi que recomiendo no usar esto.


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - vuott - 18-11-2022

(17-11-2022, 20:25)tincho escribió: probare así a ver como va.

tincho, probé mi Estructura y te dijo que a mi funciona. Shy


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - cogier - 18-11-2022

Cita:Por cierto, hermosos paisajes los de las fotografías.

Estas son fotos de mi isla. Las he puesto en la web, para que puedas ver las imágenes más grandes.

Guernsey views


RE: Cual es la forma mas rapida y eficiente de cargar imagenes en un control. - tincho - 18-11-2022

(18-11-2022, 00:47)vuott escribió: tincho, probé mi Estructura y te dijo que a mi funciona. Shy

Perfecto, es una buena noticia.
En estos momentos estoy con la interfaces y una clase que hereda de Task que es un poco rebelde, en cuanto termine eso continuare con la función con Extern.