Pictures opslaan in arrayn dan met knoppen terug in picturebox

Status
Niet open voor verdere reacties.

chrisje181

Gebruiker
Lid geworden
23 okt 2008
Berichten
106
Hallo,

Ik heb ene vraag met betrekking tot pictures en picturebox.

Ik heb een systeem dat eerst via een barcode lezer een afbeelding plaatst in een imagelist.
Vervolgens kan ik met 2 knoppen (next en back) 1 voor 1 de afbeeldingen bekijken in de picturebox1.
Alleen omdat de imagelist een vaste size heeft (die je zelf moet opgeven) zijn alle afbeeldingen misvormd.
Oftewel niet alle afbeeldingen zijn even groot. Eentje is bij wijze van 120 * 80 en een andere 250 * 154

De uiteindelijke vraag is:

Hoe kan ik ervoor zorgen dat elke afbeeldingen zijn eigen size behoudt en toch opslaan, in 1 grote lijst. Zodat ik daar gemakkelijk door heen kan scrollen????
De pictures sla ik in de imagelist op dmv hun filepath. Er staat geen enkele afbeeldingen in de applicatie, ze staan allemaal op mijn pc zelf.
 
Een ImageList is niet zo geschikt, gebruik in plaats daarvan een List: http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

Maak een List object aan van het type Bitmap en gebruik de Add methode om bitmaps (de afbeeldingen dus) aan de list toe te voegen, dus zoiets:

Code:
'List defineren van type Bitmap
Dim listPictures As New List(Of Bitmap)

'Een enkele afbeelding toevoegen:
Dim bm As Bitmap = Bitmap.FromFile("pad naar een afbeeldingen hier")
listPictures.Add(bm)
 
èn kan ik daarna gewoon dit gebruiken:

PictureBox1.Image = listPictures.Images(IM)

(waarbij IM de index nummer is)?
 
Yep, dat kan zeker, maar volgens mij moet dat dan zo:

PictureBox1.Image = listPictures.Items(IM)
 
en de laatste vraag (voor nu)
kan ik de afbeeldinge ook inportenop de volgende manier:

Dim afbeelding As System.Drawing.Image = Image.FromFile(folder + "rollen\afbeelding1.jpg") {dit staat boven in mijn code, dit is van te voren allemala al aangemaakt

en dande code om in te voeren:
listPictures.Add(afbeelding)
 
Natuurlijk, waarom zou dat niet kunnen, je moet alleen dan wel het type van de List veranderen van Bitmap in Image.
 
ik zou het niet weten, ik weetdatik imagelist ervoor kon gebruiken, verder gaat mijn kennis ook niet.
Dus daarom stel ik die vraag.
EN is hetverplicht om aan te passen naar image??? of drait ie ook op basis van bitmap....

Enik heb op ene ander form een label1 staan waarik de bestandsnaam laat zien. Dit deed ik (omdat ik in de eerste test de afbeelding rechtstreeks in picturebox1 plaatste) met split op de imagelocation (
Dim parts As String() = PictureBox1.ImageLocation.Split(New Char() {"\"c})
Form2.Label1.Text = parts(7)
)

maar hoe kan ik de imagelocation ophalen van de huidige afbeelding in de picturebox???
 
Het is beter om het type hetzelfde te houden. Dus of het type Bitmap gebruiken of Image.
Als je ook de bestandsnaam wilt opslaan in de list, kun je twee dingen doen:

1. Een class aanmaken dat erft van Bitmap of Image met een enkele string property waarin het volledige pad van de afbeeldingen in staat.
2. In plaats van een List een Dictionary gebruiken. Deze heeft een key en een value voor elke item dat je toevoegt. De value, van het type Bitmap of Image voor de afbeeldingen, en de key voor het volledige pad.

Ik ben zelf nog niet zo heel bekend met het Dictionary object, maar met het maken van een eigen class met een extra property is wel bekend terrein voor mij inmiddels.

En als je enkel de bestandsnaam wilt ophalen in plaats van het volledige pad, kan je het beter zo doen:
Code:
Form2.Label1.Text = Path.GetFileName(PictureBox1.ImageLocation)
Ik geloof zo.
 
Ja klopt, dat zou moeten gaan werken nadat je overstapt op een Dictionary object in plaats van een List OF een eigen class maakt met een property voor het pad. Dat moet eerst, pas daarna kan je door middel van Path.GetFileName de bestandsnaam ophalen. Dat werkt nu nog niet want een List van het type Bitmap of Image kan enkel een afbeelding vasthouden.

Dus je moet eerst even bedenken wat wilt gebruiken, een Dictionary of een eigen class.
 
ik heb met beide (dictionary en eigen class)n geen ervaring,

dan zou je in beide gevallen moeten neerzetten hier hoe ik dat dan moet doen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan