Newsgroup: it.comp.lang.visual-basic
Titolo: Icona 256x256 da un bitmap in VB6

Ciao. Sto sviluppando un programma che carica icone e bitmap. Se le icone sono
a piu' immagini le carica tutte (una per volta, tramite mouse) comprese quelle
256x256, ovviamente non con LoadPicture.
Dato che posso caricare anche delle bitmap (ad esempio una screenshot del desktop)
e posso selezionare un'area qualunque, se l'area e' ad esempio 256x256
mi salva l'immagine in formato icona ma rimane la zona quadrata circostante.
Come faccio a renderla trasparente? Qualche anima pia mi darebbe una dritta?
Ho fatto molte ricerche su internet ma non ho trovato niente di funzionante.
Ho dato un'occhiata a IconPro in C++ ma lavora in modo un po' diverso,
piu' a basso livello (sulla memoria). Mi sembra di aver capito che debbo
creare la AND mask, ma come? e come la inserisco nell'array di byte che
utilizzo per salvare l'icona?
Grazie
 

utilizzo per salvare l'icona?
 
Il canale alfa � composto dai bits 24-32 di un true color, per cui l'and lo
dovresti probabilmente fare con quei bit prima di salvare nel formato icona.
 
In VB classic c'e' qualcosa su VBaccelerator :
http://www.vbaccelerator.com/home/VB/Utilities/Alpha_Icon_Creator/article.asp
 
 
 in 
vb.net
 spiega qualcosa qui:
http://www.codeproject.com/Messages/1783134/How-to-add-Alpha-channel-to-Bmp-Icon-and-save-it-V.aspx
 
 
 
--
ciao
  Stefano


http://www.vbaccelerator.com/home/VB/Utilities/Alpha_Icon_Creator/article.asp
 
 
fa uso solo dell'Api CopyMemory, niente di particolare come le librerie GDI+ che
gestiscono le trasparenze ma mi hanno dato dei problemi di falso positivo con
gli antivirus.
 
 
--
ciao
  Stefano


 
Grazie lo stesso, ma ho risolto in modo diverso. Uso qualche CopyMemory
per aggiornare i due array di byte relativi alla XOR mask e alla AND mask,
usando un bitmap a 2 colori (1 bpp) fittizio (in realta' e' a 32 bit) tramite l'hDC
di una picturebox per la parte AND, e un altro hDC di un'altra picturebox
per la parte XOR per resettare l'area trasparente dell'icona, attraverso
un loop for-next. In questo modo posso convertire un bitmap in icona,
fino alla risoluzione di 256x256 pixel (visibili solo da win7 in poi, forse anche in 
Vista)
Ecco la parte principale, il cuore del programma:
 
   '// Loop through the pixels
   For i = 0 To lpII.lWidth - 1
       For j = 0 To lpII.lHeight - 1
           '// Is the source transparent at this point?
           If GetPixel(hMaskDC, i, j) = RGB(255, 255, 255) And GetPixel(hXorDC, i, j) = 
lTransColor Then
               '// Yes, so set the pixel in AND mask, and clear it in XOR mask
               SetMonoDIBPixel lpII.lpAND(), lpII.lWidth, lpII.lHeight, i, j, True
               ret = SetPixelV(hXorDC, i, j, RGB(0, 0, 0))
           Else
               '// No, so clear pixel in AND mask
               SetMonoDIBPixel lpII.lpAND(), lpII.lWidth, lpII.lHeight, i, j, False
           End If
       Next
   Next
 


 
 
Ora scaricabile al link: 
http://salclem2.altervista.org/freeware/zoom.zip
 
Se volete potete segnalarmi eventuali bug. Grazie
 
 
-- 
blog: 
http://salclem.blogspot.it/
 
sito: 
http://salclem2.altervista.org/
 
 

Se volete potete segnalarmi eventuali bug. Grazie
 
Impossibile visualizzare la guida su Win7 in quanto il formato non � pi� 
supportato...
Crea la guida in formato CHM 
 

 ha scritto nel messaggio news:52ad7ece$0$6087$5fc...@news.tiscali.it...

La guida e' vecchia e penso che non serve dato che l'uso del programma e' abbastanza
intuitivo. Comunque puoi scaricare la libreria che ti permette di vedere la vecchia guida
su win7 da questo link: 
http://salclem2.altervista.org/library/winhlp32-win7-x86-x64.cab
 
 
 
-- 
blog: 
http://salclem.blogspot.it/
 
blog: 
http://salclem2.altervista.org/blog
 
sito: 
http://salclem2.altervista.org/
 
 


http://salclem2.altervista.org/library/winhlp32-win7-x86-x64.cab
 
 
A me la guida non serve, ma non puoi presentare un programma oggi con la 
guida HLP!
E' molto meglio se ne prepari una in formato CHM... altrimenti (se non 
serve) levala direttamente... � molto meglio!