Imagelist shows blank bitmaps

This strikes me as odd - I create a small in-memory bitmap, and draw a single character with a background color on it. I then transfer this into an Imagelist control. However, when I transfer the imagelist.image(x) to a location in a picturebox, only the background color of the image shows up.

I know that the bitmap was created correctly, because if I use "bmp1.save(filename)" then take the file and read it into an image ("dim g as image = image.fromfile(filename)") then load g into the imagelist, it works great.

Can anyone tell me why it doesn't transfer properly to the imagelist unless I save it to disk and read it back?  Thanks!!


Dim bmp1 As New Bitmap(CellWidth, CellHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
 
For i = 1 To CellWidth
  For l = 1 To CellHeight
  'draw the '1's' as black
   If Mid$(CellString(i), l, 1) = "1" Then
     bmp1.SetPixel(i - 1, CellHeight - l, Color.Black)
   Else
     bmp1.SetPixel(i - 1, CellHeight - l, Color.DarkGoldenrod)
   End If
  Next l
Next i
 
IList1A.Images.Add(bmp1)

Open in new window

LongDaveAsked:
Who is Participating?
 
Mike TomlinsonConnect With a Mentor Middle School Assistant TeacherCommented:
I really don't have a TECHNICAL answer for you sorry...just haven't really seen anyone using Bitmap.SetPixel() and I knew that my method would work...   =\

0
 
Jaime OlivaresSoftware ArchitectCommented:
try with the following:

yourImgList.ImageSize = new System.Drawing.Size(CellWidth, CellHeight)
yourImgList.Images.Add(bmp1)
yourImgList.TransparentColor = Color.DarkGoldenrod  'optional

0
 
LongDaveAuthor Commented:
Nope - that didn't do it. The wierd thing is that it seems that saving the bmp to a file and then calling it back somehow transforms it so that it loads properly in the Imagelist control. Any other ideas?

0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Does this make a diff?
        Dim bmp1 As New Bitmap(cellWidth, cellHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
        Dim G As Graphics = Graphics.FromImage(bmp1)
        G.Clear(Color.Goldenrod)
        For i = 1 To cellWidth
            For l = 1 To cellHeight
                'draw the '1's' as black
                If Mid$(CellString(i), l, 1) = "1" Then
                    G.FillRectangle(Brushes.Black, New Rectangle(i - 1, cellHeight - l, 1, 1))
                End If
            Next l
        Next i
        G.Dispose()
        IList1A.Images.Add(bmp1)

Open in new window

0
 
LongDaveAuthor Commented:
OK!! That did it! But I still don't see why the use of the bmp directly to the imagelist didn't work properly. Any ideas? I'd really like to understand why. But I will issue you the points - I just didn't want to close the question before your answer.
0
 
LongDaveAuthor Commented:
Hi, Idle_Mind ... This is the 2nd time you've helped me. Thanks a lot! Your solution looks like it works fine - but I wish I knew WHY the other didn't!  :(
Oh, well!
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
A simple test using your original technique worked for me...not sure what you did wrong:
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim CellWidth As Integer = 5
        Dim CellHeight As Integer = 5
 
        Dim pixels As String = "11111,00100,00100,00100,11111;10001,11011,10101,10001,10001"
        For Each charSig As String In pixels.Split(";")
            Dim bmp As New Bitmap(CellWidth, CellHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
            Dim rows() As String = charSig.Split(",")
            For y As Integer = 0 To rows.GetUpperBound(0)
                For x As Integer = 0 To rows(y).Length - 1
                    If rows(y).Substring(x, 1) = "1" Then
                        bmp.SetPixel(x, y, Color.Black)
                    Else
                        bmp.SetPixel(x, y, Color.DarkGoldenrod)
                    End If
                Next
            Next
            ImageList1.Images.Add(bmp)
        Next
        PictureBox1.Image = ImageList1.Images(0)
        PictureBox2.Image = ImageList1.Images(1)
    End Sub
 
End Class

Open in new window

IM-Chars.jpg
0
 
LongDaveAuthor Commented:
Wierd - thanks for the input though. I was using the DrawImage function to place the chars in the picturebox, but I don't know why that would have made any difference (I'm sure it did not).

But thanks again - hope I don't have to bug you too often! :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.