⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color.inc

📁 著名的游戏开发库Allegro4.2.0 for DELPHI
💻 INC
字号:
{*         ______   ___    ___
 *        /\  _  \ /\_ \  /\_ \
 *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
 *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
 *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
 *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
 *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
 *                                           /\____/
 *                                           \_/__/
 *
 *      Color manipulation routines.
 *
 *      By Shawn Hargreaves.
 *
 *      See readme.txt for copyright information.
 *}

{$IFDEF ALLEGRO_INTERFACE}
var
  black_palette           : P_PALETTE;
  desktop_palette         : P_PALETTE;
  default_palette         : P_PALETTE;

type
  P_RGB_MAP = ^RGB_MAP;
  RGB_MAP = record
    data  : array[0..31, 0..31, 0..31] of uint8;
  end;

  P_COLOR_MAP = ^COLOR_MAP;
  COLOR_MAP = record
    data    : array[0..PAL_SIZE - 1, 0..PAL_SIZE - 1] of uint8;
  end;

var
  the_rgb_map             : ^P_RGB_MAP;
  the_color_map           : ^P_COLOR_MAP;
  _current_palette        : P_PALETTE;

  _rgb_r_shift_15          : p_sint32;
  _rgb_g_shift_15          : p_sint32;
  _rgb_b_shift_15          : p_sint32;
  _rgb_r_shift_16          : p_sint32;
  _rgb_g_shift_16          : p_sint32;
  _rgb_b_shift_16          : p_sint32;
  _rgb_r_shift_24          : p_sint32;
  _rgb_g_shift_24          : p_sint32;
  _rgb_b_shift_24          : p_sint32;
  _rgb_r_shift_32          : p_sint32;
  _rgb_g_shift_32          : p_sint32;
  _rgb_b_shift_32          : p_sint32;
  _rgb_a_shift_32          : p_sint32;

  _rgb_scale_5             : p_sint32s;
  _rgb_scale_6             : p_sint32s;

const
  MASK_COLOR_8      = 0;
  MASK_COLOR_15     = $7C1F;
  MASK_COLOR_16     = $F81F;
  MASK_COLOR_24     = $FF00FF;
  MASK_COLOR_32     = $FF00FF;

type
  table_ptr = procedure(pos: sint32); cdecl;
  blend_ptr = procedure(const pal: PALETTE; x, y: sint32; rgb: P_RGB); cdecl;
  blender_func = function(x, y, n: uint32): uint32; cdecl;

var
  palette_color: ^p_sint32;

  set_color: procedure(idx: sint32; const p: P_RGB); cdecl;
  set_palette: procedure(const p: PALETTE); cdecl;
  set_palette_range: procedure(const p: PALETTE; from, tos, retracesync: sint32); cdecl;

  get_color: procedure(idx: sint32; var p: RGB); cdecl;
  get_palette: procedure(p: PALETTE); cdecl;
  get_palette_range: procedure(p: PALETTE; from, tos: sint32); cdecl;

  fade_interpolate: procedure(const source, dest: PALETTE; output: PALETTE; pos, from, tos: sint32); cdecl;
  fade_from_range: procedure(const source, dest: PALETTE; speed, from, tos: sint32); cdecl;
  fade_in_range: procedure(const p: PALETTE; speed, from, tos: sint32); cdecl;
  fade_out_range: procedure(speed, from, tos: sint32); cdecl;
  fade_from: procedure(const source, dest: PALETTE; speed: sint32); cdecl;
  fade_in: procedure(const p: PALETTE; speed: sint32); cdecl;
  fade_out: procedure(speed: sint32); cdecl;

  select_palette: procedure(const p: PALETTE); cdecl;
  unselect_palette: procedure; cdecl;

  generate_332_palette: procedure(pal: PALETTE); cdecl;
  generate_optimized_palette: function(image: P_BITMAP; pal: PALETTE; const rsvdcols: array {[256]} of sint8): sint32; cdecl;

  create_rgb_table: procedure(table: P_RGB_MAP; const pal: PALETTE; callback: table_ptr); cdecl;
  create_light_table: procedure(table: P_COLOR_MAP; const pal: PALETTE; r, g, b: sint32; callback: table_ptr); cdecl;
  create_trans_table: procedure(table: P_COLOR_MAP; const pal: PALETTE; r, g, b: sint32; callback: table_ptr); cdecl;
  create_color_table: procedure(table: P_COLOR_MAP; const pal: PALETTE; blend: blend_ptr; callback: table_ptr); cdecl;
  create_blender_table: procedure(table: P_COLOR_MAP; const pal: PALETTE; callback: table_ptr); cdecl;

  set_blender_mode: procedure(b15, b16, b24: blender_func; r, g, b, a: sint32); cdecl;
  set_blender_mode_ex: procedure(b15, b16, b24, b32, b15x, b16x, b24x, b32x: blender_func; r, g, b, a: sint32); cdecl;

  set_alpha_blender: procedure; cdecl;
  set_write_alpha_blender: procedure; cdecl;
  set_trans_blender: procedure(r, g, b, a: sint32); cdecl;
  set_add_blender: procedure(r, g, b, a: sint32); cdecl;
  set_burn_blender: procedure(r, g, b, a: sint32); cdecl;
  set_color_blender: procedure(r, g, b, a: sint32); cdecl;
  set_difference_blender: procedure(r, g, b, a: sint32); cdecl;
  set_dissolve_blender: procedure(r, g, b, a: sint32); cdecl;
  set_dodge_blender: procedure(r, g, b, a: sint32); cdecl;
  set_hue_blender: procedure(r, g, b, a: sint32); cdecl;
  set_invert_blender: procedure(r, g, b, a: sint32); cdecl;
  set_luminance_blender: procedure(r, g, b, a: sint32); cdecl;
  set_multiply_blender: procedure(r, g, b, a: sint32); cdecl;
  set_saturation_blender: procedure(r, g, b, a: sint32); cdecl;
  set_screen_blender: procedure(r, g, b, a: sint32); cdecl;

  hsv_to_rgb: procedure(h, s, v: single; var r, g, b: sint32); cdecl;
  rgb_to_hsv: procedure(r, g, b: sint32; var h, s, v: single); cdecl;

  bestfit_color: function(const pal: PALETTE; r, g, b: sint32): sint32; cdecl;

  makecol: function(r, g, b: sint32): sint32; cdecl;
  makecol8: function(r, g, b: sint32): sint32; cdecl;
  makecol_depth: function(color_depth, r, g, b: sint32): sint32; cdecl;

  makeacol: function(r, g, b, a: sint32): sint32; cdecl;
  makeacol_depth: function(color_depth, r, g, b, a: sint32): sint32; cdecl;

  makecol15_dither: function(r, g, b, x, y: sint32): sint32; cdecl;
  makecol16_dither: function(r, g, b, x, y: sint32): sint32; cdecl;

  getr: function(c: sint32): sint32; cdecl;
  getg: function(c: sint32): sint32; cdecl;
  getb: function(c: sint32): sint32; cdecl;
  geta: function(c: sint32): sint32; cdecl;

  getr_depth: function(color_depth, c: sint32): sint32; cdecl;
  getg_depth: function(color_depth, c: sint32): sint32; cdecl;
  getb_depth: function(color_depth, c: sint32): sint32; cdecl;
  geta_depth: function(color_depth, c: sint32): sint32; cdecl;
{$ENDIF ALLEGRO_INTERFACE}
{$IFDEF ALLEGRO_IMPLEMENTATION}
{$ENDIF ALLEGRO_IMPLEMENTATION}
{$IFDEF ALLEGRO_LOADVARIABLE}
  black_palette                := LoadDLL('black_palette');
  desktop_palette              := LoadDLL('desktop_palette');
  default_palette              := LoadDLL('default_palette');

  the_rgb_map                  := LoadDLL('rgb_map');
  the_color_map                := LoadDLL('color_map');

  _current_palette             := LoadDLL('_current_palette');

  _rgb_r_shift_15              := LoadDLL('_rgb_r_shift_15');
  _rgb_g_shift_15              := LoadDLL('_rgb_g_shift_15');
  _rgb_b_shift_15              := LoadDLL('_rgb_b_shift_15');
  _rgb_r_shift_16              := LoadDLL('_rgb_r_shift_16');
  _rgb_g_shift_16              := LoadDLL('_rgb_g_shift_16');
  _rgb_b_shift_16              := LoadDLL('_rgb_b_shift_16');
  _rgb_r_shift_24              := LoadDLL('_rgb_r_shift_24');
  _rgb_g_shift_24              := LoadDLL('_rgb_g_shift_24');
  _rgb_b_shift_24              := LoadDLL('_rgb_b_shift_24');
  _rgb_r_shift_32              := LoadDLL('_rgb_r_shift_32');
  _rgb_g_shift_32              := LoadDLL('_rgb_g_shift_32');
  _rgb_b_shift_32              := LoadDLL('_rgb_b_shift_32');
  _rgb_a_shift_32              := LoadDLL('_rgb_a_shift_32');

  _rgb_scale_5                 := LoadDLL('_rgb_scale_5');
  _rgb_scale_6                 := LoadDLL('_rgb_scale_6');

  palette_color                := LoadDLL('palette_color');

  set_color                    := LoadDLL('set_color');
  set_palette                  := LoadDLL('set_palette');
  set_palette_range            := LoadDLL('set_palette_range');

  get_color                    := LoadDLL('get_color');
  get_palette                  := LoadDLL('get_palette');
  get_palette_range            := LoadDLL('get_palette_range');

  fade_interpolate             := LoadDLL('fade_interpolate');
  fade_from_range              := LoadDLL('fade_from_range');
  fade_in_range                := LoadDLL('fade_in_range');
  fade_out_range               := LoadDLL('fade_out_range');
  fade_from                    := LoadDLL('fade_from');
  fade_in                      := LoadDLL('fade_in');
  fade_out                     := LoadDLL('fade_out');

  select_palette               := LoadDLL('select_palette');
  unselect_palette             := LoadDLL('unselect_palette');

  generate_332_palette         := LoadDLL('generate_332_palette');
  generate_optimized_palette   := LoadDLL('generate_optimized_palette');

  create_rgb_table             := LoadDLL('create_rgb_table');
  create_light_table           := LoadDLL('create_light_table');
  create_trans_table           := LoadDLL('create_trans_table');
  create_color_table           := LoadDLL('create_color_table');
  create_blender_table         := LoadDLL('create_blender_table');

  set_blender_mode             := LoadDLL('set_blender_mode');
  set_blender_mode_ex          := LoadDLL('set_blender_mode_ex');

  set_alpha_blender            := LoadDLL('set_alpha_blender');
  set_write_alpha_blender      := LoadDLL('set_write_alpha_blender');
  set_trans_blender            := LoadDLL('set_trans_blender');
  set_add_blender              := LoadDLL('set_add_blender');
  set_burn_blender             := LoadDLL('set_burn_blender');
  set_color_blender            := LoadDLL('set_color_blender');
  set_difference_blender       := LoadDLL('set_difference_blender');
  set_dissolve_blender         := LoadDLL('set_dissolve_blender');
  set_dodge_blender            := LoadDLL('set_dodge_blender');
  set_hue_blender              := LoadDLL('set_hue_blender');
  set_invert_blender           := LoadDLL('set_invert_blender');
  set_luminance_blender        := LoadDLL('set_luminance_blender');
  set_multiply_blender         := LoadDLL('set_multiply_blender');
  set_saturation_blender       := LoadDLL('set_saturation_blender');
  set_screen_blender           := LoadDLL('set_screen_blender');

  hsv_to_rgb                   := LoadDLL('hsv_to_rgb');
  rgb_to_hsv                   := LoadDLL('rgb_to_hsv');

  bestfit_color                := LoadDLL('bestfit_color');

  makecol                      := LoadDLL('makecol');
  makecol8                     := LoadDLL('makecol8');
  makecol_depth                := LoadDLL('makecol_depth');

  makeacol                     := LoadDLL('makeacol');
  makeacol_depth               := LoadDLL('makeacol_depth');

  makecol15_dither             := LoadDLL('makecol15_dither');
  makecol16_dither             := LoadDLL('makecol16_dither');

  getr                         := LoadDLL('getr');
  getg                         := LoadDLL('getg');
  getb                         := LoadDLL('getb');
  geta                         := LoadDLL('geta');

  getr_depth                   := LoadDLL('getr_depth');
  getg_depth                   := LoadDLL('getg_depth');
  getb_depth                   := LoadDLL('getb_depth');
  geta_depth                   := LoadDLL('geta_depth');
{$ENDIF ALLEGRO_LOADVARIABLE}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -