PaintPalette example for Visual Basic

This example sets the paint palette to the palette of each Lead control. It then loads two images and dithers them to 8 bits per pixel with optimized palettes, and displays them side by side. In 8-bit display mode, you can see the palette problems that result when you do not use a fixed palette.

Lead1.PaintPalette = PAINTPALETTE_AUTO
Lead2.PaintPalette = PAINTPALETTE_AUTO

'Disable automatic repainting of the image.
Lead1.AutoRepaint = False
Lead2.AutoRepaint = False

'Turn off scroll bars to make sure we use the full client area.
Lead1.AutoScroll = False
Lead2.AutoScroll = False

'Clear the bitmaps from memory
Lead1.Bitmap = 0
Lead2.Bitmap = 0

Screen.MousePointer = 11 'Hourglass
'Load the bitmaps. These hard-coded path names may be different on your system.
Lead1.Load "c:\lead\images\image1.cmp", 0, 0, 1
Lead2.Load "c:\lead\images\image2.cmp", 0, 0, 1

'Change the bitmaps to 8 BPS with optimized palettes
Lead1.ColorRes 8, CRP_OPTIMIZEDPALETTE, CRD_FLOYDSTEINDITHERING, 0
Lead2.ColorRes 8, CRP_OPTIMIZEDPALETTE, CRD_FLOYDSTEINDITHERING, 0

'Make the controls visible so that we can size and position them.
'They will not really appear until we load an image and paint it.
Lead1.Visible = True
Lead2.Visible = True

'Set the variables used for preserving the aspect ratio.
HeightFactor1 = Lead1.BitmapHeight
WidthFactor1 = Lead1.BitmapWidth
HeightFactor2 = Lead2.BitmapHeight
WidthFactor2 = Lead2.BitmapWidth
HeightAllowed = ScaleHeight * 0.8
WidthAllowed = ScaleWidth * 0.45

'Center each LEAD control on half of the form, preserving the aspect ratio.
'Check to see if using the maximum width will make the image too tall.
'Set the dimensions based on the result.
If (WidthAllowed * HeightFactor1) / WidthFactor1 < HeightAllowed Then
  Lead1.Left =  (ScaleWidth / 4) - (WidthAllowed / 2)
  Lead1.Width = WidthAllowed
  Lead1.Height = (Lead1.Width * HeightFactor1) / WidthFactor1
  Lead1.Top = (ScaleHeight - Lead1.Height) / 2
Else
  Lead1.Top = (ScaleHeight - HeightAllowed) / 2
  Lead1.Height = HeightAllowed
  Lead1.Width = (Lead1.Height * WidthFactor1) / HeightFactor1
  Lead1.Left = (ScaleWidth / 4) - (Lead1.Width / 2)
End If
If (WidthAllowed * HeightFactor2) / WidthFactor2 < HeightAllowed Then
  Lead2.Left =  (ScaleWidth * 3/4) - (WidthAllowed / 2)
  Lead2.Width = WidthAllowed
  Lead2.Height = (Lead2.Width * HeightFactor2) / WidthFactor2
  Lead2.Top = (ScaleHeight - Lead2.Height) / 2
Else
  Lead2.Top = (ScaleHeight - HeightAllowed) / 2
  Lead2.Height = HeightAllowed
  Lead2.Width = (Lead2.Height * WidthFactor2) / HeightFactor2
  Lead2.Left = (ScaleWidth * 3 / 4) - (Lead2.Width / 2)
End If

'Set the image display sizes to match the LEAD controls
Lead1.SetDstRect 0, 0, Lead1.ScaleWidth, Lead1.ScaleHeight
Lead1.SetDstClipRect 0, 0, Lead1.ScaleWidth, Lead1.ScaleHeight
Lead2.SetDstRect 0, 0, Lead2.ScaleWidth, Lead2.ScaleHeight
Lead2.SetDstClipRect 0, 0, Lead2.ScaleWidth, Lead2.ScaleHeight

'Display the images
Lead1.ForceRepaint
Lead2.ForceRepaint
Screen.MousePointer = 0 ' Default