Newsgroup: it.comp.lang.visual-basic
Titolo: Scurire una porzione di una immagine

Avrei bisogno di scurire una porzione di una immagine, in pratica un'area
rettangolare dell'immagine (di una picturebox) dovrebbe apparire più scura
rispetto al resto. Ho provato fondendo sopra un'altra picture in AND ma il
risultato è pessimo.
Qulacuno mi ha parlato dell'alphaBlending, che ho visto funziona solo su
alcuni windows (ma questo sarebbe il problema minore), ma come posso usarlo?
Non mi serve per forza tutto il codice, mi  basterebbe avere qualche piccolo
indizio.. qualcuno che mi guidi in questa buia valle piena di API :)
Saluti a tutti
Roberto Alicata

 ha scritto nel messaggio
news:afh32d$2jt$1...@fe1.cs.interbusiness.it...



Ho provato ed effettivamente l'effetto è quello voluto, ma è davvero
lentissimo anche su un PIII a più di un Ghz!!!!
su immagini piccole da 100x100pixel ci mette 1-2 sec ma su un'immagine da
1024x768 è improponibile.
Ti ringrazio comunque per avermi risposto e per averlo fatto con tanto di
codice funzionante (non è poco :D)
In ogni caso non ho capito bene il modo in cui imposti i nuovi valori di
R,G,B ... come si calcolano?
Grazie ancora
Roberto Alicata

 lentissimo anche su un PIII a più di un Ghz!!!!
Mi ero sbagliato, avevo dimenticato di mettere ScaleMode su pixel per la
picture... ora è molto più veloce, ma si vede comunque la colorazione che
procede... non c'è un modo per nasconderla e farla apparire solo alla fine?
 Roberto Alicata

 ha scritto nel messaggio
news:afhg5i$ofp$1...@fe2.cs.interbusiness.it...


 indizio.. qualcuno che mi guidi in questa buia valle piena di API :)
Ho il sospetto che quello che ti propongo io ti risulterà parecchio ostico,
comunque proviamo lo stesso:
In pratica si tratta di usare 4 API. GetColorAdjustment,
SetColorAdjustment, SetStretchBltMode, StretchBlt.
ATTENZIONE! Funziona solo da NT3.51 in poi, niente Windows 9x o ME.
Andiamo con ordine. Ogni picturebox (e generalizzando ogni finestra) ha una
COLORADJUSTMENT map di riferimento associata. Questa è una struttura (che ti
consiglio di guardare sull'MSDN) che tra i vari dati contiene Contrasto e
Luminosità. Questi parametri possono valere tra -100 e + 100.
Quindi, dichiari una variabile di tipo COLORADJUSTMENT, leggi con
GetColorAdjustment la mappa colore della tua bitmap destinazione, modifichi
i valori di Luminosità e Contrasto come preferisci, e li riscrivi nella tua
bitmap bersaglio con la SetColorAdjustment.
Questo tipo di struttura colore viene sfruttato solo dall'API StretchBlt, e
solo se essa lavora in modalità HALFTONE.
Quindi usa la  SetStretchBltMode per settare la modalità HALFTONE, e poi usa
la StretchBlt per copiare dalla tua bitmap di partenza alla tua bitmap
bersaglio la porzione che ti interessa.
Credo che il tutto funzioni anche se la bitmap di partenza e quella di
destinazione coincidono, ma non ci metto la mano sul fuoco. Prova prima con
2 bitmap, e quando ti funziona prova con una sola.
Comunque se hai problemi anche solo per l'uso di AlphaBlend, preparati a
passare almeno una notte insonne su queste 4 api. ;-)
Ciao omonimo
*Roby*
P.S.
Se pasticci un po' con la COLORADJUSTMENT map c'è da divertirsi parecchio.
Puoi persino settare il tipo di illuminazione, e virare i colori verso
singole componenti, come se illuminassi l'immagine con una lampada colorata.

 hai settato AutoRedraw della Picture su True?
Ho praovato sia con AutoRedraw = true che mettendolo a False e facendo
Picture1.Refresh alla fine.
Nel primo caso mi godo lo spettacolo della colorazione, nel secondo invece
aspetto che scurisca e poi
vedo il risultato.
Andrebbe anche bene se non fosse che lavorando con immagini un pò grandi
tipo 640x480 già devo aspettare
un bel pò prima di vedere il risultato. PEnso che mi darò all'alphablending
se riuscirò a capire come si fa.. e per gli utenti NT4.0... o Win95 bhe si
adatteranno per ora...
grazie mille ancora
e scusa se ho risposto solo
Roberto Alicata

 singole componenti, come se illuminassi l'immagine con una lampada
colorata.
bello bello :) non vedo l'ora di saperci giocare senza farmi male :))
Grazie mille omonimo :)
saluti
Roberto Alicata

 tutto dovrebbe funzionare o no?
Geniale! :-)
Ciao
*Roby*