Newsgroup: it.comp.lang.visual-basic
Titolo: VBA e Immagini

Nessuno mi sa dare aiuto. Forse qualcuno di Voi che conosce bene l'utilizzo
delle API puo'.
Ho realizzato un piccolo applicativo in Access che mi permette di
visualizzare oltre che dati anche immagini PCX in stile <Impiegati di
Northwind>.
Controllo Immagine e Proprieta' Picture=<Path_nomefile>
Il mio problema e' quello di volere visualizzare l'immagine in negativo al
volo in quanto le immagine archiviate hanno lo sfondo nero e sono talmente
numerose che convertirle tutte, senza sovrascrivere l'originale,
comporterebbe un notevole dispendio di spazio su HD.
Grazie a tutti

 ha scritto nel messaggio
news:IF6pb.84878$vO5.
3109473
@twister1.libero.it...

Ciao!
questo è il codice per passare al negativo di un immagine
ma è spaventosamente lento....mostruosamente lento!!
    For i = 0 To Picturebox.ScaleHeight - 1
        For j = 0 To Picturebox.ScaleWidth - 1
            pixvalue = Picturebox.Point(j, i)
            hex_pixval = Hex(pixvalue)
            red_val = "&h" & Mid$(hex_pixval, 5, 2)
            green_val = "&h" & Mid$(hex_pixval, 3, 2)
            blue_val = "&h" & Mid$(hex_pixval, 1, 2)
            If red_val = "&h" Then red_val = "&h0"
            If green_val = "&h" Then green_val = "&h0"
            If blue_val = "&h" Then blue_val = "&h0"
            red_val = &HFF - red_val
            green_val = &HFF - green_val
            blue_val = &HFF - blue_val
            Picturebox.PSet (j, i), RGB(red_val, green_val, blue_val)
        Next
    Next
da qualche parte avevo scritto una cosa del genere con la bitblt ed era
istantaneo
appena lo ritrovo te lo posto qui
...ora sto crollando dal sonno! :-o:-() :-O :-)  <--Simulazione di uno
sbadiglio!
intanto se ti viene in mente qualche idea da questo codice...
Ciao!
Marco

 comporterebbe un notevole dispendio di spazio su HD.
prova così è molto più veloce ma si può fare di meglio....
Private Sub NEGATIVE_IMAGE(PICTURE As PictureBox)
    On Error GoTo fin:
    Dim X As Long
    Dim y As Long
    Dim R1 As Integer
    Dim G1 As Integer
    Dim B1 As Integer
    Dim R2 As Integer
    Dim G2 As Integer
    Dim B2 As Integer
    Picture3.Cls
    Picture3.Height = Picture1.Height
    Picture3.Width = Picture1.Width
    For X = 0 To Picture1.ScaleWidth
        DoEvents
        For y = 0 To Picture1.ScaleHeight
                'con questa funz mi prendo i valori dei pixel
                GET_COLORS PICTURE.Point(X, y), R1, G1, B1
              Picture3.PSet (X, y), RGB(R1, G1, B1)
        Next y
    Next X
Beep
Exit Sub
Private Sub GET_COLORS(COLOR As Long, ByRef R As Integer, ByRef G As
Integer, ByRef B As Integer)
    Dim TEMP As Long
    TEMP = (COLOR And 255)
    R = TEMP And 255
    TEMP = Int(COLOR / 256)
    G = TEMP And 255
    TEMP = Int(COLOR / 65536)
    B = TEMP And 255
        R = Abs(R - 255)
        G = Abs(G - 255)
        B = Abs(B - 255)
End Sub

wrote "GioXŽ"
Ti ringrazio di tutto e scusa se non riporto il listato da te gentilmente
inviatomi.
Funziona tutto in VB6, ma se utilizzo i controlli di Access 
p.es
. <Image>
quest'ultimo non possiede nessuna, o quasi, delle proprieta' necessarie.
Se utilizzo dei controlli esterni di VB6, anche qui, non tutte le proprieta'
risultano disponibili. Comunque ho trovato stimolante il tuo aiuto e,
cercando in rete, ho trovato un controllo immagine ActiveX con annesse
librerie DLL che mi permette di effettuare al volo e rapidamente la
visualizzazione negativa dell'immagine. Grazie di cuore.
Ciao Gory