translate.cpp
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:4k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. /*
  2.  * translate.c - translate between different pixel formats
  3.  */
  4. /*
  5.  *  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
  6.  *
  7.  *  This is free software; you can redistribute it and/or modify
  8.  *  it under the terms of the GNU General Public License as published by
  9.  *  the Free Software Foundation; either version 2 of the License, or
  10.  *  (at your option) any later version.
  11.  *
  12.  *  This software is distributed in the hope that it will be useful,
  13.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *  GNU General Public License for more details.
  16.  *
  17.  *  You should have received a copy of the GNU General Public License
  18.  *  along with this software; if not, write to the Free Software
  19.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  20.  *  USA.
  21.  */
  22. #include "stdhdrs.h"
  23. #include "translate.h"
  24. #include <stdio.h>
  25. #include "rfb.h"
  26. #define CONCAT2(a,b) a##b
  27. #define CONCAT2E(a,b) CONCAT2(a,b)
  28. #define CONCAT4(a,b,c,d) a##b##c##d
  29. #define CONCAT4E(a,b,c,d) CONCAT4(a,b,c,d)
  30. #define OUT 8
  31. #include "tableinittctemplate.cpp"
  32. #include "tableinitcmtemplate.cpp"
  33. #define IN 8
  34. #include "tabletranstemplate.cpp"
  35. #undef IN
  36. #define IN 16
  37. #include "tabletranstemplate.cpp"
  38. #undef IN
  39. #define IN 32
  40. #include "tabletranstemplate.cpp"
  41. #undef IN
  42. #undef OUT
  43. #define OUT 16
  44. #include "tableinittctemplate.cpp"
  45. #include "tableinitcmtemplate.cpp"
  46. #define IN 8
  47. #include "tabletranstemplate.cpp"
  48. #undef IN
  49. #define IN 16
  50. #include "tabletranstemplate.cpp"
  51. #undef IN
  52. #define IN 32
  53. #include "tabletranstemplate.cpp"
  54. #undef IN
  55. #undef OUT
  56. #define OUT 32
  57. #include "tableinittctemplate.cpp"
  58. #include "tableinitcmtemplate.cpp"
  59. #define IN 8
  60. #include "tabletranstemplate.cpp"
  61. #undef IN
  62. #define IN 16
  63. #include "tabletranstemplate.cpp"
  64. #undef IN
  65. #define IN 32
  66. #include "tabletranstemplate.cpp"
  67. #undef IN
  68. #undef OUT
  69. rfbInitTableFnType rfbInitTrueColourSingleTableFns[3] = {
  70.     rfbInitTrueColourSingleTable8,
  71.     rfbInitTrueColourSingleTable16,
  72.     rfbInitTrueColourSingleTable32
  73. };
  74. rfbInitTableFnType rfbInitColourMapSingleTableFns[3] = {
  75.     rfbInitColourMapSingleTable8,
  76.     rfbInitColourMapSingleTable16,
  77.     rfbInitColourMapSingleTable32
  78. };
  79. rfbInitTableFnType rfbInitTrueColourRGBTablesFns[3] = {
  80.     rfbInitTrueColourRGBTables8,
  81.     rfbInitTrueColourRGBTables16,
  82.     rfbInitTrueColourRGBTables32
  83. };
  84. rfbTranslateFnType rfbTranslateWithSingleTableFns[3][3] = {
  85.     { rfbTranslateWithSingleTable8to8,
  86.       rfbTranslateWithSingleTable8to16,
  87.       rfbTranslateWithSingleTable8to32 },
  88.     { rfbTranslateWithSingleTable16to8,
  89.       rfbTranslateWithSingleTable16to16,
  90.       rfbTranslateWithSingleTable16to32 },
  91.     { rfbTranslateWithSingleTable32to8,
  92.       rfbTranslateWithSingleTable32to16,
  93.       rfbTranslateWithSingleTable32to32 }
  94. };
  95. rfbTranslateFnType rfbTranslateWithRGBTablesFns[3][3] = {
  96.     { rfbTranslateWithRGBTables8to8,
  97.       rfbTranslateWithRGBTables8to16,
  98.       rfbTranslateWithRGBTables8to32 },
  99.     { rfbTranslateWithRGBTables16to8,
  100.       rfbTranslateWithRGBTables16to16,
  101.       rfbTranslateWithRGBTables16to32 },
  102.     { rfbTranslateWithRGBTables32to8,
  103.       rfbTranslateWithRGBTables32to16,
  104.       rfbTranslateWithRGBTables32to32 }
  105. };
  106. // rfbTranslateNone is used when no translation is required.
  107. void
  108. rfbTranslateNone(char *table, rfbPixelFormat *in, rfbPixelFormat *out,
  109.  char *iptr, char *optr, int bytesBetweenInputLines,
  110.  int width, int height)
  111. {
  112.     int bytesPerOutputLine = width * (out->bitsPerPixel / 8);
  113.     while (height > 0) {
  114. memcpy(optr, iptr, bytesPerOutputLine);
  115. iptr += bytesBetweenInputLines;
  116. optr += bytesPerOutputLine;
  117. height--;
  118.     }
  119. }