Joost H. Joost H. - 1 month ago 8
C# Question

Multiple images from folder

as I'm fairly new to C# and WPF I just can't figure out how to do this. I have a form that should show 151 images (all pokemon generation 1 sprites) in a form. The way I've done it now is that it shows the same image 151 times instead of all images just once. The code I wrote for this is as follow:

public partial class PokeGame : Window
{
BitmapImage carBitmap = new BitmapImage(new Uri("pack://application:,,,/Images/All_Sprites/001.png", UriKind.Absolute));

{

InitializeComponent();

int imgCount = 151;
int left = 0;
int top = 0;
List<Image> imageList = new List<Image>();
for (int i = 0; i < imgCount; i++)
{
if(i % 10 == 0)
{
if (i != 0)
{
top += 175;
left = 0;
} else
{
top = 0;
left = 0;
}
}

Image img_ding = new Image();
img_ding.Source = carBitmap;
img_ding.Height = 150;
img_ding.Width = 150;
img_ding.Margin = new Thickness(left, top ,0 ,0);
imageList.Add(img_ding);
left += 175;
}

int j = 0;

foreach (Image img in imageList)
{
imageCanvas.Children.Add(img);
j++;
}

}


As you can see there's probably lots of room for improvement in my code. However, my question is: How can I make it so that it doesn't display the same image 151 times but all images (sprite001.png, sprite002.png, sprite003.png, etc.)?

Answer

You need to define your bitmap inside the loop, not outside. Then each iteration will create a new bitmap with the new path.

so something like:

for (int i = 0; i < imgCount; i++)
{
   // padding left will give you 001 and 010 and 151
   string img = i.ToString().PadLeft(3, '0');
   BitmapImage carBitmap = new BitmapImage(new Uri("pack://application:,,,/Images/All_Sprites/" + img+".png", UriKind.Absolute));
   // the rest of your code
}