Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: VB 6 negatiivinen kuva

Sivun loppuun

Milu [25.02.2005 19:31:36]

#

Saako picture boxsissa olevaa kuvaa/grafikkaa vaihettua negatiiviseks ilman lukematta sisältöä pikseli kerrallaan ja muuttamalla sitten pisteen väriä.

Musta valkoseks ja muut värit mitä niistä sitten tuleekin.

tuomas [25.02.2005 20:38:30]

#

Saa, ja vielä ihan helpostikin. Kyseiseen voit käyttää bitblt nimistä apia (ks. haku, koodivinkit). Kopioimisen (vbsrccopy) sijasta annat apille viimeiseksi parametriksi vbsrcinvert.

setä [25.02.2005 21:33:26]

#

Ja ilman apiakin PaintPicture-metodilla.

petrinm [26.02.2005 10:07:30]

#

Tossa on yksin kertainen ja hidasta tapa tehdä negaatiivinen kuva.

Private Sub Form_Click()
    Picture1.ScaleMode = 3 'yksikkö pikseli

    Dim i As Integer, j As Integer, vari As Long
    Dim r As Integer, g As Integer, b As Integer
    Dim rr As Integer, gg As Integer, bb As Integer


    For i = 0 To Picture1.ScaleWidth
        For j = 0 To Picture1.ScaleHeight
            'luetaan pikselin väri
            vari = Picture1.Point(i, j)

            'lasketaan väriarvosta r, g ja b
            r = vari Mod 256
            g = (vari \ 256) Mod 256
            b = vari \ 65536

            'värit käänteis väreiksi
            rr = 256 - r
            gg = 256 - g
            bb = 256 - b

            'vaihdetaan pikselin väri
            Picture1.PSet (i, j), RGB(rr, gg, bb)
        Next
    Next
End Sub

hunajavohveli [26.02.2005 10:12:50]

#

Milu kirjoitti:

lukematta sisältöä pikseli kerrallaan

Tuossa nyt kuitenkin luetaan pikseli kerrallaan. :)
Ihan hyvää harjoitusta itse tehdyt koodit ovat, ei siinä mitään, mutta jos haluaa tehdä nopeasti, kannattaa käyttää valmiita funktioita.

Milu [26.02.2005 11:28:05]

#

Miten tolla PaintPicture-metodilla tapahtuis, jos sais vaikka esimerkin.

Metabolix [26.02.2005 15:58:58]

#

petrinm:
Mitä järkeä on erottaa jokainen väri, vähentää jokainen erikseen ja sitten koota taas kokonaiseksi väriarvoksi? Kaiken voi vähentää kerralla.
Picture1.PSet (i, j), (16777215 - vari)

Jos Not-operaatio toimii luvuille (en tiedä VB:stä), niin sillä sitten. Tai Xor-operaatiolla.

Muutenkin tuossa 256:n paikalla pitäisi olla 255, koska lukuarvo on väliltä (0 .. 255).
rr = 255 - r

setä [26.02.2005 16:46:06]

#

Näin toimii PaintPicturella:

Picture1.PaintPicture Picture1, 0, 0, , , , , , , vbDstInvert

Milu [27.02.2005 09:35:08]

#

Miksi jos picture boxsiin jossa on musta tausta tuo kuvan, jossa on vaikka valkosella pohjalla musta ympyrä se ei vbSrcInvert:llä muuta sitä negatiiviseks, mutta jos tausta on valkoinen, silloin se kyllä muutta tuodun kuvan negatiiviseksi?

setä [27.02.2005 10:35:20]

#

Lue tarkemmin. Siinä pitää olla vbDstInvert.

Milu [27.02.2005 12:07:52]

#

Luettu on, mutta dst:llä ei muuta ollenkaan, ainoastaan src:llä muutta, mutta siinäkään ei jos tausta on musta.

Laitappas esimerkki kaikkineen ohjeiskäskyineen, jossa picture boxsista kopioidusta kuvasta tehdään käänteinen.

Voipi olla, että mulla on moka jossain muussa siinä koodissa.

setä [27.02.2005 13:53:32]

#

Lähetin esimerkkiprojektin sähköpostilla.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta