Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tarkistaminen onko tietty kuva ladattu

Sivun loppuun

rndprogy [25.03.2004 19:36:40]

#

Sub Image1_Click ()
If image1.Picture = LoadPicture("kuva.bmp") Then End
End Sub

Minusta tuon pitäisi toimia vaan ei. Olen yrittänyt muokata tuota koodia mutten ole löytänyt oikeaa ratkaisua. Onko jollain takataskussa oikeanlaista koodia.

sqwiik [25.03.2004 19:59:23]

#

Eli haluat siis tarkistaa, onko image1:ssä jokin kuva, vai? Valitettavasti voin sanoa, että imagen picture-alueet eivät kelpaa vertailuun. Syystä en ole varma, mutta et voi testata onko imagessa pikselilleen jokin tietty kuva millään yksinkertaisella komennolla.
Voithan aina toki käydä läpi pikseli kerrallaan, mutta taitaa olla liian hidasta :)
Laita kuvan latauksessa muistiin, mikä tiedosto siihen on ladattu ja vaertaa tiedostonimiä. Näinkin voisi onnistua.

rndprogy [25.03.2004 20:09:58]

#

Vaan ompas keino sittenkin

Sub Image1_Click ()
If LoadPicture("kuva.bmp") = True Then End
End Sub

Tämä toimii. :)

Edit: Mutta miten saan sen toimimaan indexin kanssa

Sub Image1_Click (index as integer)
If LoadPicture("kuva.bmp") = True Then End
End Sub

sillä nyt se ottaa sen kaikista kuvista.

sqwiik [25.03.2004 20:51:30]

#

Tuo koodi

If LoadPicture("kuva.bmp") = True Then End

vain tarkistaa onko tuota kuvaa olemassa... näin uskoisin.

Eli tuon index-homman tehdäksesi sinun on tarkastettava kyseisen image1(index):n kuvan tiedoston nimi. Se taas voi olla hieman hankalaa.

hunajavohveli [25.03.2004 20:55:47]

#

No sitä minäkin, että miten tuo If-lauseke voi tietää mitä PictureBoxia tarkoitetaan?

rndprogy [25.03.2004 21:06:08]

#

Täytyy sitten heivata tuo systeemi :( ja ottaa takaisin vanha jäykkä systeemi :( .Mutta jos joku keksii keinon niin...

Ja pakkohan tuohon keino on olla muuten vb3 on puutteellinen.

setä [25.03.2004 21:37:00]

#

LoadPicture("kuva.bmp") = True koska se edustaa nollasta poikkeavaa lukua. Kyseinen luku on erilainen vaikka tiedosto olisi sama joten niitä ei voi suoraan verrata. En tiedä miten tuo lukuarvo muodostuu, mutta joka kerralla tulee eri luku vaikka kyse on samasta imagesta ja kuvatiedostosta.

Antti Laaksonen [26.03.2004 14:21:00]

#

Vanhoissa Visual Basiceissa LoadPicturen palautusarvo on aina -1 eli True. Uudemmissa palautusarvo on sedän kuvaama hämäräperäinen luku, joka on ilmeisesti kuvan tunniste muistissa. Kuitenkaan yksittäisiä pikseleitä ei tällä tavalla voi verrata. Tiedostonimien vertaaminen on ihan hyvä idea, jos ei halua jokaista pikseliä tutkia erikseen.

rndprogy [26.03.2004 16:06:51]

#

No en todellakaan ajatellut tutkia jokaista pixeliä erikseen vaikka kyse olisi pienestäkin kuvasta. Mutta en vieläkään ole löytänyt ratkaisua miten ladatun kuvan tiedoston nimen saa koodaamalla selville. Mutta se olisi helpompaa jos olisin koodilla ladannut kuvan mutta kun en ole.

sqwiik [26.03.2004 17:08:09]

#

Milläs sitten olet sen ladannut? Muuttuuko kuva ohjelman ajon aikana?

rndprogy [26.03.2004 17:09:32]

#

Kyllä!

rndprogy [26.03.2004 19:31:32]

#

Image1 = LoadPicture("kuva.bmp")
Print Image1.Picture

eli miten miten saan printattua tuo 'kuva.bmp' nimen tuohon

sooda [26.03.2004 19:32:10]

#

etpäs mitenkään, ei se kuvaloota tiedä mitä siihen o ladattu.

Meitzi [26.03.2004 19:45:21]

#

Eikai se kuva sinne boxiin itsestään ilmesty?

Samalla kun lataat kuvant eli koodissasi kohta
Image1 = LoadPicture("kuva.bmp") pistä perään myös
Image1.tag = "kuva.bmp" näin tiedät myöhemmin mikä kuva siinä on

hunajavohveli [26.03.2004 19:54:39]

#

Onko muuten mitenkään mahdollista tallentaa noita kuvia ensin muuttujiin ja sitten vasta myöhemmin niistä kopioida PictureBoxeihin? Kumma idea kenties, mutta tuli vaan mieleen.

Edit: Tai siis ei tietenkään mihinkään tavallisiin muuttujiin vaan ajattelin, jos VB:ssä olisi joku systeemi tyyliin:

Dim muuttuja As Image

tai jotain sen tapaista.

rndprogy [26.03.2004 20:02:44]

#

Perjaatteessa kyllä jos se typettaa
type image
...
end type

Ja joo tuo tag voi olla hyvä idea.

rndprogy [26.03.2004 22:33:02]

#

No joo siis miten tuon tagin pitäisi toimia. Kuva sitäpaitsi vaihtuu ajon aikana.

Meitzi [26.03.2004 23:27:11]

#

Kerros nyt vähä enempi siitä koodista. Tietääkös joku onko VB3:ssa tuota .tag parametria?

rndprogy [26.03.2004 23:35:00]

#

No oletetaan että on vaikka neljä saman nimistä imagea, jolloin ne ovat indexoituja. (vaikka oikeasti niitä on 223) Niissä vaihtuu aika ajoin kuva. Ja pitäisi saada selville mikä kuva tietyssä imagessa kulloinkin on.
Ja VB3:ssa on .tag parametri.

Antti Laaksonen [27.03.2004 00:11:48]

#

Tag-ominaisuuteen voi tallentaa minkä tahansa merkkijonon. Tässä tapauksessa voisi Tagiin pistää tiedoston nimen heti kuvan latauksen jälkeen. Sitten vertailun voisi myöhemmin tehdä tähän tyyliin:

If Image1.Tag = "c:\omat\kuva.bmp" Then
    MsgBox "Kuva on sama!"
End If

223 erillistä Image-kontrollia ei tosin kuulosta kovin hyvältä, moinen vienee tosi paljon muistia. Pystyisitkö tekemään ohjelman jollain muulla tavalla?

rndprogy [27.03.2004 08:53:13]

#

No empäs tiedä kun ne ovat 32*32pixel tilejä. Jotenka ehkä pitää muuttaa toteutusta. Mutta en tiedä miten. Jokainen tile pitäisi pystyä valitsemaan yksitellen, joka olisi helppoa juuri näin...

setä [27.03.2004 09:26:33]

#

Tuohon ehkä sopisi kuvaleikkuri (PictureClip Control) kuin nyrkki silmään. Oletko kokeillut.

rndprogy [27.03.2004 09:59:56]

#

Huh! Ongelma ratkaistu .tagilla. En vain heti tajunnut. Olin kai liikaa miettinyt.

Antti [27.03.2004 13:51:56]

#

Aiheeseen liittyen - kokeilin mielenkiinnosta tuota Image-kontrollia ja huomasin yhden dokumentoimattoman(?) ominaisuuden, jota en ole huomannut aiemmin.

Image-objektin picture-ominaisuudella on myös ominaisuudet:
Picture.Handle,
Picture.Height,
Picture.hPal,
Picture.Type,
Picture.Width
Sekä metodi:
Picture.Render()

Kyseisiä ominaisuuksia ei ole dokumentoitu MSDN:ssä (July 2001) VB:n puolella ollenkaan ja C:n puolella vain ohimennen.

Asensin samalle koneelle .NET kehitysympäristön ja tuli mieleen olisiko mahdollista, että kyseinen COM objekti olisi korvaantunut .NET:in vastaavalla?

Tosin .NET:in MSDN:kään (Jan 2004) ei kyseisiä ominaisuuksia tunnistanut...

Edit: typoja

Antti Laaksonen [28.03.2004 00:47:42]

#

Ainakin minun vuotta vanhemmasta MSDN:stä nuo kaikki löytyy otsikon "StdPicture Object" alta.

edit: myös: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/html/vbobjpicture.asp

Antti [28.03.2004 21:45:34]

#

Kiitos kaima.
Ei sillä sinällään väliä ole - luontainen uteliaisuus iski ja halusin tsekata kyseisen luokan läpi mitä sillä saa aikaiseksi :D


Sivun alkuun

Vastaus

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

Tietoa sivustosta