GIFs

So, let's get right into it - if you try to save a GIF file in .NET, you will always get a simple GIF (no transparency, no animation, that is, unless you've found out how to do this by surfing the web . I found two pretty good resources on creating something besides a simple GIF by way of two very interesting methods.

Transparent GIFs - Looking at the Palette

This solution is brought to you by Bob Powell .NET. So, first we have the palettes.
Dim Gif As Bitmap = New Bitmap("c:\testray.gif")
'loads a GIF file into a bitmap object.

Gif.Palette.Entries(6) = Color.FromArgb(0, 255, 0, 255)
'Hey, this should be making this pallete color a transparent color in the GIF, right?

In the palettes, we have .Entries, which contain an array of colors, easily modifiable, and, from the given setup of the color palette interface, you could theoretically save a transparent GIF simply by adding transparency to one of the channels. However, if you try it, you have been "seduced by concept, and then wounded by reality"... see Bob Powell .NET

I also like how a color palette's constructor is read only.

So, that leaves only one solution - we must make our own image.

Animated GIFs - Looking at the Specifications

Yes, if you tried to add a frame into a GIF file with .SaveAdd, it doesn't work. :)
This solution is brought to you by Gump's Blog.
I like this solution - it is an actual construction of an animated GIF from the ground up (from the specification headers to the picture data (transferred, though).
        'These are animated gif protocol constants.
        By = New Byte() {33, 255, 11, 78, 69, 84, 83, 67, 65, 80, 69, 50, 46, 48, 3, 1, 0, 0, 0}
        Bz = New Byte() {33, 249, 4, 9, 20, 0, 255, 0}

        'extension introducer
        'application extension
        'size of block: 11 for "NETSCAPE2.0" (78, 69, 84, 83, 67, 65, 80, 69, 50, 46, 48)
        'Size of block, followed by [1][0][0]
        'Block terminator

        'Extension introducer
        'Graphic control extension
        'Size of block
        'Flags: reserved., disposal method, user input, transparent color
        'Delay time low byte [X]
        'Delay time high byte [Y], the delay time can be found with 256 * Y ms + X ms 
        'Transparent color index
        'Block terminator

Aren't those byte arrays a work of art? Since we're working with a memory stream, we need streams - lots of streams!
        MS = New IO.MemoryStream
'That's a memory stream, which streams gif data into the binary writer.
        FS = New IO.FileStream("C:\animacion.gif", IO.FileMode.OpenOrCreate)
'This is the file stream to which we save our GIf to file.
        BW = New IO.BinaryWriter(FS)
'This is the binary writer, which actually writes to the file stream.


'The MS writes to the BW, which writes to the FS, which writes to the
'file - isn't this ingenious. :)
Again, see Gump's Blog.