+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30

Discussione: [API Grafica] Immagine Trasparente

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091

    [API Grafica] Immagine Trasparente

    Con il seguente Metodo, ottengo l'immagine contenuta nella libreria delle Immagini usate per i Ribbon.
    codice:
    Dim Image               As IPictureDisp
    Set Image = Application.CommandBars.GetImageMso(NameImageMSO, 32, 32)
    Come riportato quì:CommandBars.GetImageMso ottengo un Oggetto IPictureDisp.

    Per poterla applicare ad un CommandButton devo convertire l'immagine in un BYTE() array, in quanto la proprietà PictureData dei CommandButton e dei Controlli Immagine accetta questo formato.
    Per farlo mi appoggio a GDI+, l'immagine di base è una BMP.

    Tenete presente che MsAccess, per chi usava VB6, non implementa il controllo PictureBox, quindi sono costretto ad usare le API GDI+ in memoria.

    Tutto funziona correttamente il Button ed il controllo Immagine mostrano l'immagine Trasparente.
    Problema non non so perchè... nel senso che non so se l'oggetto IPictureDisp contiene dati dell'Alpha o il Mask...

    Quando poi voglio andare a salvare l'immagine, sempre usando GDI+ [GdipSaveImageToFile], BMP/JPG/GIF o PNG, ha sempre lo sfondo Bianco, da cui deduco che l'oggetto IPictureDisp debba avere internamente qualche riferimento.

    Ora il problema concreto nella realtà lo ottengo quando voglio assegnare all'oggetto CommandBarButton, tramite la proprietà Picture, direttamente il valore restituito da GetImageMso..!
    L'immagine viene regolarmente mostrata ma con SFONDO BIANCO...
    Ora siccome l'oggetto CommandBarButton espone sia l'Oggetto Picture che l'Oggetto Mask, ho pensato che riuscendo a recuperarla e passandola alle proprietà del Controllo si riuscisse ad ottenere la TRASPARENZA nella CommandBar.

    Non sono particolamente "svelto" con la grafica API, ma se avete qualche indicazione, anche solo una spiegazione teorica mi aiuterebbe...

    Grazie
    Ultima modifica di @Alex; 23-07-2019 13:04 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  2. #2
    Ferrari_and non è in linea Scolaretto
    Post
    108
    DA quanto mi ricordo delle lezioni corsi sulla gestione delle immagini gli unici 2 formati di file che supportano aree di trasparenza sono il Gif e il PNG.

    i 2 formati utilizzano tecniche diverse per implementare tele tecnica.

    GIF uno colore della tavolozza indicizzata viene marcato come colore di trasparenza.
    PNG In quest'ultimo, le informazioni di trasparenza sono memorizzate in un canale separato detto canale alfa.

    Quindi per primo io mi soffermerei su questi 2 formati soltanto.
    E cercherei come impostare questi 2 valori da programma. Purtroppo io non ho mai fatto nulle di simile quindi non so se è una strada percorribile o meno.

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Abbiano parlato di 2 argomenti estremamente diversi... parlo di manipolare l'oggetto image in memoria non ho nulla di fisico quindi si lavora con le API sui BIT usando funzioni specifiche.

    Grazie ugualmente.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    Ferrari_and non è in linea Scolaretto
    Post
    108
    Scusa avevo capito che il problema fosse il salvataggio della immagine, non la sua visualizzazione in access.

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    La soluzione brutalmente è questa:https://blogs.msdn.microsoft.com/msh...-office-icons/
    Il problema è convertire in vb6 o vba...
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  6. #6
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Post
    685
    Sia i DIB (Device Independent Bitmap) che i BMP classici possono contenere informazioni sulla trasparenza.
    Tramite un byte è possibile impostare il grado di trasparenza (con un numero tra 0 e 255, per porre il valore di opaco o trasparente).
    Per gestire ciò si può impiegare una chiamata alle API sfruttando la funzione AlphaBlend (simile a BitBlt a StretchBlt) tranne per il fatto che utilizza un canale Alfa (metodo molto simile alle DirectX con un colore chiave trasparente).
    https://docs.microsoft.com/en-us/win...gdi-alphablend
    https://docs.microsoft.com/it-it/win..._blendfunction
    VB Graphics Programming: Part 3 (Advanced API) – Tanner Helland (dot) com

    Puoi leggere questi link, ove si trovano degli esempi che impostano (in vario modo) il grado di trasparenza (o semitrasparenza):
    https://www.mrexcel.com/forum/excel-...bel-frame.html
    https://365airsoft.com/es/questions/...ft-office-2007
    https://www.experts-exchange.com/que...-a-bitmap.html
    https://www.codeguru.com/vb/gen/vb_g...ws-in-VB-1.htm
    Autoload
    Animations using DIB Section - AndreaVB Visual Basic and VB.NET source code discussion board
    https://www.vbarchiv.net/api/api_alphablend.html
    LoadPicture Replacement with GDI+-VBForums
    Willy

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Grazie Willy dei Link, molti erano sicuramente già conosciuti.
    Il problema di base che ho, non è nell'uso di AlphaBlend o di BitBlt su cui fare l'AND dei Bit... quanto come dicevo qualche cosa di più "Teorico" sul ricavato dalla funzione GetImageMSO e di conseguenza nel caso come recuperare i dati... piuttosto che andare a leggere il Bit(0,0) per rilevare il colore del BackGround ed andarlo ad usare in AlphaBlend.
    A questo aggiungo la questione dell'assenza del controllo PictureBox, che come saprai espone un ContextDevice(hDC) autonomo e, siccome pare ne servano 2... e dico pare in quanto dubito che il Source ed il Destination possono essere lo stesso, nel mio caso credo sia da creare sull'handle della Form...

    Nella sostanza, ho un po di confusione di base sulla strada da seguire.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  8. #8
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    603
    Non so se sia un percorso praticabile (o desiderabile visto che non usa API), ma forse potresti sfruttare la proprietà picture del report :watermark an access report
    Alex, prendi così il suggerimento ... senza pretesa che sia quello che cerchi ... non so neanche come potresti utilizzarlo per i tuoi scopi ....

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Ciao Max... grazie, direi però che non è attinente al problema, quanto segnali serve si ad applicare un'immagine di fondo del report come è appunto fattibile con Word... ma la trasparenza deve essere realizzata con un editor grafico poi caricata, non lo fa access.

    Purtroppo sono consapevole che il tema è per il 99% degli utenti Access, sconosciuto... infatti probabilmente i vecchi programmatori di VB6 che trafficavano con la grafica sono i piu papabili conoscitori dell'argomento...
    Attendiamo... nel frattempo qualche cosa la provo... ci studio.
    Ultima modifica di @Alex; 24-07-2019 19:42 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  10. #10
    Ferrari_and non è in linea Scolaretto
    Post
    108
    Dai programmatori VB6 non aspettarti molto la manipolazione immagini la facevi tramite il controllo / oggetto PictureBox che però non è disponibile o al massimo con l'oggetto immage questo oggetto c' è in access e ti consente di fare un minimo di manipolazione?

    Altrimenti devi sperare in qualcuno che abbia esperienza nella elaborazione immagini per controlli di visione e controllo o simili. Chi tratta solo immagini ormai usa programmi già pronti.

+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi