aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2005-10-11 15:34:35 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2005-10-11 15:34:35 +0000
commit23fd773aa51c56791278cb0c32021127db6414de (patch)
treecb7d922319589ba7d6c91a583d0d56e0a1013d01
parent824260b5ebdff16546c0f55b637b198ab2e5df0c (diff)
accept the upside-down flag of Gem's image
svn path=/trunk/externals/gem2pdp/; revision=3693
-rwxr-xr-xpix_2pdp.cpp28
-rwxr-xr-xpix_2pdp.h3
2 files changed, 23 insertions, 8 deletions
diff --git a/pix_2pdp.cpp b/pix_2pdp.cpp
index f8743f2..bfe998e 100755
--- a/pix_2pdp.cpp
+++ b/pix_2pdp.cpp
@@ -28,6 +28,7 @@ pix_2pdp::~pix_2pdp()
gem_xsize = 0;
gem_ysize = 0;
gem_csize = 0;
+ gem_upsidedown = 0;
}
// Image processing
@@ -38,6 +39,7 @@ void pix_2pdp::processImage(imageStruct &image)
gem_ysize = image.ysize;
gem_csize = image.csize;
gem_format = image.format;
+ gem_upsidedown = image.upsidedown;
}
// pdp processing
@@ -57,7 +59,7 @@ void pix_2pdp::bangMess()
m_data = (short int *)pdp_packet_data(m_packet0);
pY = m_data;
- pY2 = m_data + gem_xsize;
+ pY2 = m_data + gem_xsize;
pV = m_data+psize;
pU = m_data+psize+(psize>>2);
@@ -68,13 +70,14 @@ void pix_2pdp::bangMess()
case GL_RGBA:
case GL_BGR:
case GL_BGRA:
- for ( py=0; py<gem_ysize; py++)
+ for ( py=0; py<gem_ysize; py++)
{
+ const t_int py2=(gem_upsidedown)?py:(gem_ysize-py);
for ( px=0; px<gem_xsize; px++)
{
// the way to access the pixels: (C=chRed, chBlue, ...)
// image[Y * xsize * csize + X * csize + C]
- helper = py*gem_xsize*gem_csize + px*gem_csize;
+ helper = py2*gem_xsize*gem_csize + px*gem_csize;
g1=gem_image[helper+chRed]; // R
g2=gem_image[helper+chGreen]; // G
g3=gem_image[helper+chBlue]; // B
@@ -97,6 +100,11 @@ void pix_2pdp::bangMess()
short u,v;
unsigned char *pixel = gem_image;
unsigned char *pixel2 = gem_image + gem_xsize * gem_csize;
+ const int row_length = gem_xsize* gem_csize;
+ if(0==gem_upsidedown){
+ pixel=gem_image+row_length * (gem_ysize-1);
+ pixel2=gem_image+row_length * (gem_ysize-2);
+ }
while (row--){
int col=cols;
while(col--){
@@ -113,9 +121,14 @@ void pix_2pdp::bangMess()
pixel2+=4;
pU++; pV++;
}
- pixel += gem_xsize * gem_csize;
- pixel2 += gem_xsize * gem_csize;
- pY += gem_xsize; pY2 += gem_xsize;
+ if(gem_upsidedown){
+ pixel += row_length;
+ pixel2 += row_length;
+ } else {
+ pixel -= 3*row_length;
+ pixel2 -= 3*row_length;
+ }
+ pY += gem_xsize; pY2 += gem_xsize;
}
pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
break;
@@ -124,9 +137,10 @@ void pix_2pdp::bangMess()
case GL_LUMINANCE:
for ( py=0; py<gem_ysize; py++)
{
+ const t_int py2=(gem_upsidedown)?py:(gem_ysize-py);
for ( px=0; px<gem_xsize; px++)
{
- *pY = gem_image[py*gem_xsize*gem_csize + px*gem_csize] << 7;
+ *pY = gem_image[py2*gem_xsize*gem_csize + px*gem_csize] << 7;
pY++;
if ( (px%2==0) && (py%2==0) )
{
diff --git a/pix_2pdp.h b/pix_2pdp.h
index 64229d6..f097d1a 100755
--- a/pix_2pdp.h
+++ b/pix_2pdp.h
@@ -42,7 +42,8 @@ class GEM_EXTERN pix_2pdp : public GemPixObj
int gem_ysize;
int gem_csize;
int gem_format;
-
+ int gem_upsidedown;
+
// pdp data
t_outlet *m_pdpoutlet;
int m_packet0;