Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    77

    [VB6] Caricare immagine e ottenere info colore pixel

    Salve a tutti,

    dovrei in VB6 caricare una immagine bmp o jpg e dando le coordinate x e y del pixel ottenere il valore RGB, inoltre vorrei trasformare l'immagine in scala di grigi.

    Come posso fare?
    che libreria posso usare? GDI32 o GDI+?

    Potete scrivermi un esempio di codice?

    L'immagine non deve essere visualizzata.


    Grazie!!!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [VB6] Caricare immagine e ottenere info colore pixel

    Originariamente inviato da ermurena
    Salve a tutti,

    dovrei in VB6 caricare una immagine bmp o jpg e dando le coordinate x e y del pixel ottenere il valore RGB, inoltre vorrei trasformare l'immagine in scala di grigi.
    Puoi usare un controllo Picture (anche non visibile) ... ci hai provato?

    Potete scrivermi un esempio di codice?
    Usa un controllo Picture per caricare in memoria l'immagine e usa il metodo GetPoint per prelevare il colore del punto e la PSet per cambiarlo. Per trasformare il colore in bianco e nero, c'e' una formula a partire dalle componenti RGB ... puoi trovarla su internet.

    Prova a scrivere il codice tu e ci risentiamo se qualcosa non va ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    77
    Dim r As Long, g As Long, b As Long

    Private Sub Command1_Click()
    Label1.Caption = r
    Label2.Caption = g
    Label3.Caption = b
    End Sub

    Private Sub Form_Load()

    Dim color As Long

    Picture1.Picture = LoadPicture("img.bmp")

    color = GetPixel(Picture1.hdc, 0, 1)

    r = color And &HFF
    g = (color And &HFF00&) \ &H100&
    b = (color And &HFF0000) \ &H10000

    End Sub


    con:

    Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

    dichiarato in un modulo .bas




    ma mi fornisce sempre lo stesso valore rgb per qualsiasi pixel !!!!!.
    L'immagine è caricata correttamente.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma le coordinate del pixel, quando le vari?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    77
    Per i miei scopi le coordinate del pixel saranno fisse. Ma io ho provato a cambiarle direttamente nel codice e il colore non cambia mai sempre (255,255,255)
    anche se l'immagine è tutta nera o bianca

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Forse hai scelto le coordinate sbagliate ... prova con altre coordinate perche' il codice funziona ... anche se non e' quello che ti avevo consigliato ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    77
    forse mi arrendo....

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova a impostare la proprieta' Autoredraw a true ...

  9. #9
    prova a mettere il codice nella routine Click
    e NON nel FormLoad !!

    Per trasformare in scala di grigi uso questa "terna" di Sub:

    codice:
    Public Sub GetRGB(ByVal Colore As Long, r%, g%, b%)
    ' scompone il colore in argomento nelle componenti RGB.
    ' ATTENZIONE: scrive nelle variabili R, G, B passate ByRef come argomenti
        r = Colore And 255&
        g = (Colore \ 256&) And 255&
        b = (Colore \ 65536) And 255&
    End Sub
    
    
    Public Function GetLite(ByVal Colore As Long) As Integer
    ' restituisce la luminosita' (0...255) del colore indicato
       Dim r%, g%, b%
       GetRGB Colore, r, g, b
       GetLite = 0.298 * r + 0.588 * g + 0.11 * b
    End Function
    
    
    Public Function GetGrey(ByVal Colore As Long) As Long
    ' restituisce il grigio RGB, corrispondente al colore indicato
       Dim L%
       L = GetLite(Colore)
       GetGrey = RGB(L, L, L)
    End Function
    Ciao !
    IceCube_HT (VB6 fan Club)

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    77
    Con Autoredraw true sembra funzionare!!! Grazie oregon!!!

    Quello che devo ora capire è come fare la stessa cosa senza dover usare una PictureBox inserita in un form...diciamo una applicazione lato server (tipo DLL)

    Ora provo anche la trasformazione in scala di grigi...

    Grazie!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.