Your comment refers to the bitmap being RGB. That concerns me that you're on the wrong track.
Let's review how 1-bit images work:
Each pixel in the image is either black or white.
We can store 8 pixels in 1 byte.
Without compression, stride = width / 8 (give or take), and totalbytes = stride * height.
Depending on the file type, and whether it was created on a PC, Mac or other, the first pixel in a byte may = 1 or 128, the second 2 or 64, etc. This is called endianess.
Let's say we had a row of pixels that alternated black and white pixels like
X X X X X X X X X X X X X X X X X X X X X X
...
So each byte would be 0x01 + 0x04 + 0x10 + 0x40 = 0x55
Still with me? (also, see how nice those numbers look? That's why programmers use hex.)
Now let's look at your code.
CurrentByte = Math.Truncate((Point.Y * bmpData.Stride) + ((Point.X) / 8))
Let's say we're interested in the pixel at [0,0].
Point.Y == 0
bmpData.Stride ==
let's say
1000
.
Point.X == 0
CurrentByte = Math.Truncate(0 * 1000) + (0 / 8)
CurrentByte == Math.Truncate(0)
CurrentByte == 0
Do you see a problem? You never referred to the actual pixel data, just coordinates.
To get actual pixel data you'd need
CurrentPixel = FWBitmap.GetPixel(x,y)
Now that that's clear, DON'T DO THAT. You'll still need to split CurrentPixel out into its bits and your application will be VERY SLOW.
Now, excuse my ignorance but I don't know if VB.NET has
unsafe
code and pointers like C# does. I assume so. You'll need to look that up. Anyone who has ever attempted to write an imaging application that handles large images has eventually realized that you need to use pointers to make it work with any kind of acceptable performance.
Hope this helps!