ImageConvertRow

Converts a row of image data into another color depth

Syntax
   Declare Sub ImageConvertRow ( ByVal src As Any  Ptr, ByVal src_bpp As 
   Long, ByVal dst As Any  Ptr, ByVal dst_bpp As Long, ByVal width As Long, 
   ByVal isrgb As Long = 1 )

Usage
   ImageConvertRow( src, src_bpp, dst, dst_bpp, width [, isrgb ] )

Parameters
   src
      The address of the start of the source row.  The source can either be 
      a full-color image with a bit depth of 24 or 32 bits per pixel, or a 
      paletted image with a bit depth of 1-8 bits per pixel.  Converting a 
      paletted image will only work properly if you are in a screen mode 
      that is using the correct palette for the image when you do the 
      conversion.
   src_bpp
      The number of bits per pixel in the source row.  1-8, 24 and 32.
   dst
      The address of the start of the destination row.  The image can be a 
      full-color image of 16 or 32 bits per pixel.  If the source is a 
      paletted image, the destination can also be a paletted image of 1 to 
      8 bits per pixel.
   dst_bpp
      The number of bits per pixel in the destination row.  Valid values 
      for this are 1-8, 16 and 32.
   width
      The length of the row in pixels.
   isrgb
      A value of zero indicates that the Red and Blue channels are the 
      other way round in the source image.  Use this switch if you want the 
      Red and Blue channels to be swapped in the conversion.

Description
   Copies the row of an image from one memory location to another, 
   converting the color information in each pixel to match the destination 
   image.

Example
   #include "fbgfx.bi"
   #if __FB_LANG__ = "fb"
   Using FB
   #endif

   Const As Long w = 64, h = 64
   Dim As IMAGE Ptr img8, img32
   Dim As Integer x, y

   '' create a 32-bit image, size w*h:
   ScreenRes 1, 1, 32, , GFX_NULL
   img32 = ImageCreate(w, h)

   If img32 = 0 Then Print "Imagecreate failed on img32!": Sleep: End

   '' create an 8-bit image, size w*h:
   ScreenRes 1, 1, 8, , GFX_NULL
   img8 = ImageCreate(w, h)

   If img8 = 0 Then Print "Imagecreate failed on img8!": Sleep: End

   '' fill 8-bit image with a pattern
   For y = 0 To h - 1
      For x = 0 To w - 1
         PSet img8, (x, y), 56 + (x + y) Mod 24
      Next x
   Next y

   '' open a graphics window in 8-bit mode, and PUT the image into it:
   ScreenRes 320, 200, 8
   WindowTitle "8-bit color mode"
   Put (10, 10), img8

   Sleep

   '' copy the image data into a 32-bit image
   Dim As Byte Ptr p8, p32
   Dim As Long pitch8, pitch32

   #ifndef ImageInfo '' older versions of FB don't have the ImageInfo feature
   #define GETPITCH(img_) IIf(img_->Type=PUT_HEADER_NEW,img_->pitch,img_->old.width*img_->old.bpp)
   #define GETP(img_) CPtr(Byte Ptr,img_)+IIf(img_->Type=PUT_HEADER_NEW,SizeOf(PUT_HEADER),SizeOf(_OLD_HEADER))
   pitch8 = GETPITCH(img8): p8 = GETP(img8)
   pitch32 = GETPITCH(img32): p32 = GETP(img32)
   #else
   ImageInfo( img8,  , , , pitch8,  p8  )
   ImageInfo( img32, , , , pitch32, p32 )
   #endif

   For y = 0 To h - 1
      ImageConvertRow(@p8 [ y * pitch8 ],  8, _
                  @p32[ y * pitch32], 32, _
                  w)
   Next y

   '' open a graphics window in 32-bit mode and PUT the image into it:
   ScreenRes 320, 200, 32
   WindowTitle "32-bit color mode"
   Put (10, 10), img32

   Sleep

   '' free the images from memory:
   ImageDestroy img8
   ImageDestroy img32

Dialect Differences
   * Not available in the -lang qb dialect unless referenced with the 
     alias __ImageConvertRow.

Differences from QB
   * New to FreeBASIC

See also
   * ScreenRes
   * Get (Graphics)
   * Put (Graphics)
   * ImageCreate
   * ImageDestroy
   * ImageInfo

