Autor Tema: Convertir hBitmap a hImage para GDI, es posible...  (Leído 2052 veces)

0 Usuarios y 1 Visitante están viendo este tema.

McWetn

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Convertir hBitmap a hImage para GDI, es posible...
« en: Febrero 19, 2021, 08:08:28 am »
Hola a todos, es la primera vez que expongo un problema en este foro.

Me gustaría saber si se puede pasar de hBitmap a hImage.

Me explico, Estoy haciendo un programa que se visualizan las caratulas extraídas del metadato ITAG de los ficheros mp3 de música en un Picturebox.
Estoy utilizando el control ‘ImagenSlide’ de nuestro estimado Leandro Ascierto para visualizar las covers de las canciones en una lista.
En el control ‘ImageSliderl’ en la Sub DrawImage(…), es donde se cargan las imágenes.

En este punto pensé, bueno… si ya tengo cargada la imagen en la variable ‘Caratula’ tipo ‘hBitmap’ como variable ‘Publica’ para todo el programa, porque no aprovecharla y no tener que guardarla a un fichero JPG y que después en una línea del programa de DrawImage() en ‘GdipLoadImageFromFile(StrPtr(FileName), hImage)’ la tenga que cargar de nuevo en la variable ‘FileName’ y procesar la imagen 2 veces.

Aquí está el problema, una vez que carga la libreria ‘GdipLoadImageFromFile’ el fichero temporal jpg, la devuelve como ’hImage’.

Creo que para no perder tanto tiempo en ese proceso y se carguen las imágenes más rápidas en el control ‘ImageSliderl’ puede haber otra solución.
He estado mirando librerías y hay una que se llama ‘GdipLoadImageFromStream(…) no se si podría servir.

Espero que me haya explicado bien y puedan ayuderme.

Esto es lo que estoy haciendo hasta ahora y funciona, pero se podría mejorar con lo ya mencionado???

Código: [Seleccionar]
Private Sub DrawImage(hGraphics As Long, Index As Long, FileName As String, DestTR As RECTF)   
    Dim TR As RECTF
    Dim Conver As Long
    Dim hImage As Long
    Dim ImagPlayMow As Long
    Dim PLeft As Long, PTop As Long
    Dim ReqWidth As Long, ReqHeight As Long
    Dim HScale As Double, VScale As Double
    Dim MyScale As Double
    Dim ImgWidth As Long
    Dim ImgHeight As Long
    Dim SourceHDC As Long
    Dim TempFile As String

 ‘ Código añadido para que de la varible ‘CARATULA’
 ‘ que esta como:
 ‘ Public Caratula As StdPicture
 ' En otro modulo. 

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

If mLoadCover = FromMusicFile Then
    TempFile = App.Path & "\tmpCover.jpg"
    Call LoadTag(FileName)                     ' Llama al objeto que extrae la carátula del MP3 y la guarda en la variable 'Caratula'
    Call SavePicture(Caratula, TempFile)  ' Guarda la imagen de la variable 'Caratula' en el fichero temporal 'tmpCover.jpg'
    FileName = TempFile
End If

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

If GdipLoadImageFromFile(StrPtr(FileName), hImage) = 0 Then

    Call GdipGetImageBounds(hhImage, TR, UnitPixel)
       
        ImgWidth = TR.nWidth
        ImgHeight = TR.nHeight

                "
                "
 
‘-----------El Código Continua IGUAL -------------------------
En Sub



Gracias.
« última modificación: Febrero 19, 2021, 08:18:50 am por McWetn »

McWetn

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Re:Convertir hBitmap a hImage para GDI, es posible...
« Respuesta #1 en: Febrero 20, 2021, 02:16:44 pm »
Al final lo solucioné,

Use 'GdipCreateBitmapFromHBITMAP' , la tuve que agregar, ya que no estaba.

Saludos.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Convertir hBitmap a hImage para GDI, es posible...
« Respuesta #2 en: Febrero 24, 2021, 01:26:09 am »
Hola McWetn bienvenido al foro , un poco tarde pero bien diste con el api correcta, solo por curiosidad y que modulo o clases estas usando para extraer la imagen del mp3, estoy haciendo un reproductor casero, pero el método que utilizo solo extrae la imagen del Front Cover, es solo por curiosear.