summaryrefslogtreecommitdiffstats
path: root/mpeglib/lib/util/render/dither/ditherRGB_flipped.cpp
blob: ba1776753ecd4494672c1fc5bc6531cb2feb769c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
  flips RGB images
  Copyright (C) 2000  Martin Vogt

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU Library General Public License as published by
  the Free Software Foundation.

  For more information look at the file COPYRIGHT in this package

 */


#include "ditherRGB_flipped.h"

#include <iostream>

using namespace std;


DitherRGB_flipped::DitherRGB_flipped() {
  flipSpace=NULL;
  flipSize=0;
}

DitherRGB_flipped::~DitherRGB_flipped() {
  if (flipSpace != NULL) {
    delete flipSpace;
  }
}




void DitherRGB_flipped::flipRGBImage(unsigned char* dest,unsigned char* src,
				     int depth,int width,int height,int ) {

  int byteDepth;

  switch(depth) {
  case 8:
    byteDepth=1;
    break;
  case 15:
  case 16:
    byteDepth=2;
    break;
  case 24:
  case 32:
    byteDepth=4;
    break;
  default:
    cout << "unknown byteDepth:"<<depth
         << " in DitherRGB_flipped::flipRGBImage"<<endl;
    return;
  }
    

  int spaceNeeded=width*height*byteDepth;

  if (spaceNeeded > flipSize) {
    if (flipSpace != NULL) {
      delete flipSpace;
    }
    cout << "flipSpace:"<<spaceNeeded<<endl;
    flipSpace=new unsigned char[spaceNeeded+64];
    flipSize=spaceNeeded;
  }

  int i;
  int lineSize=width*byteDepth;
  unsigned char* end=dest+lineSize*(height-1);

  for (i=0;i<height;i++) {
    memcpy(end,src,lineSize);
    src+=lineSize;
    end-=lineSize;
  }

}