bitplane add
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -96,6 +96,9 @@ namespace ams
|
|||||||
int Nx,Ny;
|
int Nx,Ny;
|
||||||
uint8_t *data; //[x+width*y]
|
uint8_t *data; //[x+width*y]
|
||||||
|
|
||||||
|
int &width; //aliases for Nx,Ny
|
||||||
|
int &height;
|
||||||
|
|
||||||
amsbitplane();
|
amsbitplane();
|
||||||
~amsbitplane();
|
~amsbitplane();
|
||||||
amsbitplane(const amsbitplane& other);
|
amsbitplane(const amsbitplane& other);
|
||||||
@ -104,11 +107,11 @@ namespace ams
|
|||||||
amsbitplane& operator=(amsbitplane&& other) noexcept;
|
amsbitplane& operator=(amsbitplane&& other) noexcept;
|
||||||
|
|
||||||
int resize(int _Nx, int _Ny);
|
int resize(int _Nx, int _Ny);
|
||||||
void transpose();
|
amsbitplane transpose();
|
||||||
void rotcw();
|
amsbitplane rotcw();
|
||||||
void rotccw();
|
amsbitplane rotccw();
|
||||||
void flipx();
|
amsbitplane flipx();
|
||||||
void flipy();
|
amsbitplane flipy();
|
||||||
|
|
||||||
uint8_t get(int I, int J) const;
|
uint8_t get(int I, int J) const;
|
||||||
int set(int I, int J, uint8_t val);
|
int set(int I, int J, uint8_t val);
|
||||||
@ -123,13 +126,11 @@ namespace ams
|
|||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
//rescales the image with linear interpolation
|
//rescales the image with linear interpolation
|
||||||
int rescale(int nnx, int nny);
|
int rescale(int _Nx, int _Ny);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//Tests//
|
|
||||||
|
|
||||||
void amscppimglib_test1();
|
|
||||||
|
|
||||||
}; //end namespace ams
|
}; //end namespace ams
|
||||||
|
|
||||||
|
@ -80,6 +80,30 @@ void amsimage_region_set(
|
|||||||
amspixel val
|
amspixel val
|
||||||
);
|
);
|
||||||
|
|
||||||
|
void amsimage_plane_copy(
|
||||||
|
uint8_t *datato,
|
||||||
|
int Ipto,
|
||||||
|
int Npto,
|
||||||
|
int Nxto,
|
||||||
|
int Nyto,
|
||||||
|
const uint8_t *datafrom,
|
||||||
|
int Ipfrom,
|
||||||
|
int Npfrom,
|
||||||
|
int Nxfrom,
|
||||||
|
int Nyfrom,
|
||||||
|
int offsetx,
|
||||||
|
int offsety
|
||||||
|
);
|
||||||
|
|
||||||
|
void amsimage_planeregion_set(
|
||||||
|
uint8_t *data,
|
||||||
|
int Np, int Nx, int Ny,
|
||||||
|
int Ip,
|
||||||
|
int x0, int y0,
|
||||||
|
int x1, int y1,
|
||||||
|
uint8_t val
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,145 @@
|
|||||||
#include <amscppimglib4/amscppimglib4.hpp>
|
#include <amscppimglib4/amscppimglib4.hpp>
|
||||||
|
#include <amscppimglib4/amscppimglib4_intlutil.hpp>
|
||||||
|
|
||||||
namespace ams
|
namespace ams
|
||||||
{
|
{
|
||||||
|
|
||||||
|
amsbitplane::amsbitplane() : Nx(0), Ny(0), data(NULL), width(Nx), height(Ny)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
amsbitplane::~amsbitplane()
|
||||||
|
{
|
||||||
|
if(data!=NULL) {delete[] data; data=NULL;}
|
||||||
|
Nx = 0;
|
||||||
|
Ny = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
amsbitplane::amsbitplane(const amsbitplane& other) : Nx(0), Ny(0), data(NULL), width(Nx), height(Ny)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
if(this!=&other)
|
||||||
|
{
|
||||||
|
res = this->resize(Nx,Ny);
|
||||||
|
if(res==amsimage_success)
|
||||||
|
{
|
||||||
|
imglib4::amsimage_plane_copy(
|
||||||
|
this->data, 0, 1, Nx, Ny,
|
||||||
|
other.data, 0, 1, other.Nx, other.Ny,
|
||||||
|
0,0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
amsbitplane::amsbitplane(amsbitplane&& other) noexcept : Nx(0), Ny(0), data(NULL), width(Nx), height(Ny)
|
||||||
|
{
|
||||||
|
if(this!=&other)
|
||||||
|
{
|
||||||
|
this->Nx = other.Nx;
|
||||||
|
this->Ny = other.Ny;
|
||||||
|
this->data = other.data;
|
||||||
|
|
||||||
|
other.Nx = 0;
|
||||||
|
other.Ny = 0;
|
||||||
|
other.data = NULL;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
amsbitplane& amsbitplane::operator=(const amsbitplane& other)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
if(this!=&other)
|
||||||
|
{
|
||||||
|
res = this->resize(Nx,Ny);
|
||||||
|
if(res==amsimage_success)
|
||||||
|
{
|
||||||
|
imglib4::amsimage_plane_copy(
|
||||||
|
this->data, 0, 1, Nx, Ny,
|
||||||
|
other.data, 0, 1, other.Nx, other.Ny,
|
||||||
|
0,0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
amsbitplane& amsbitplane::operator=(amsbitplane&& other) noexcept
|
||||||
|
{
|
||||||
|
if(this!=&other)
|
||||||
|
{
|
||||||
|
if(this->data!=NULL) {delete[] this->data; this->data=NULL;}
|
||||||
|
this->Nx = 0; this->Ny = 0;
|
||||||
|
|
||||||
|
this->Nx = other.Nx;
|
||||||
|
this->Ny = other.Ny;
|
||||||
|
this->data = other.data;
|
||||||
|
|
||||||
|
other.Nx = 0;
|
||||||
|
other.Ny = 0;
|
||||||
|
other.data = NULL;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
int amsbitplane::resize(int _Nx, int _Ny)
|
||||||
|
{
|
||||||
|
int ret = amsimage_success;
|
||||||
|
|
||||||
|
uint8_t *newdata = NULL;
|
||||||
|
|
||||||
|
_Nx = (_Nx<0) ? 0 : _Nx;
|
||||||
|
_Ny = (_Ny<0) ? 0 : _Ny;
|
||||||
|
|
||||||
|
if(_Nx == Nx && _Ny == Ny)
|
||||||
|
{
|
||||||
|
return ret; //no resize necessary
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_Nx==0 || _Ny == 0)
|
||||||
|
{
|
||||||
|
//zero size image
|
||||||
|
if(data!=NULL) {delete[] data; data=NULL;}
|
||||||
|
Nx = 0;
|
||||||
|
Ny = 0;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
newdata = new(std::nothrow) uint8_t[_Nx*_Ny];
|
||||||
|
if(newdata==NULL)
|
||||||
|
{
|
||||||
|
ret = amsimage_failure;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
imglib4::amsimage_planeregion_set(
|
||||||
|
newdata,
|
||||||
|
1,_Nx,_Ny,0,
|
||||||
|
0,0,_Nx,_Ny,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
if(data!=NULL)
|
||||||
|
{
|
||||||
|
imglib4::amsimage_plane_copy(
|
||||||
|
newdata,0,1,_Nx,_Ny,
|
||||||
|
data,0,1,Nx,Ny,
|
||||||
|
0,0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data!=NULL) {delete[] data; data=NULL;}
|
||||||
|
data = newdata;
|
||||||
|
Nx = _Nx;
|
||||||
|
Ny = _Ny;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
@ -32,7 +32,7 @@ namespace imglib4
|
|||||||
|
|
||||||
N = dx*dy;
|
N = dx*dy;
|
||||||
|
|
||||||
Is = N/nthreads;
|
Is = N/nthreads; Is = (Is<1) ? 1 : N;
|
||||||
I0 = (threadnum)*Is;
|
I0 = (threadnum)*Is;
|
||||||
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ namespace imglib4
|
|||||||
dy = (dy<0) ? 0 : dy;
|
dy = (dy<0) ? 0 : dy;
|
||||||
N = dx*dy;
|
N = dx*dy;
|
||||||
|
|
||||||
Is = N/nthreads;
|
Is = N/nthreads; Is = (Is<1) ? 1 : N;
|
||||||
I0 = (threadnum)*Is;
|
I0 = (threadnum)*Is;
|
||||||
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
||||||
|
|
||||||
@ -163,7 +163,160 @@ namespace imglib4
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amsimage_plane_copy_tf(
|
||||||
|
int threadnum,
|
||||||
|
int nthreads,
|
||||||
|
uint8_t *datato,
|
||||||
|
int Ipto,
|
||||||
|
int Npto,
|
||||||
|
int Nxto,
|
||||||
|
int Nyto,
|
||||||
|
const uint8_t *datafrom,
|
||||||
|
int Ipfrom,
|
||||||
|
int Npfrom,
|
||||||
|
int Nxfrom,
|
||||||
|
int Nyfrom,
|
||||||
|
int offsetx,
|
||||||
|
int offsety
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int64_t I,I0,I1,Is,N,Ix,Iy,Ia,Ib;
|
||||||
|
int dx,dy;
|
||||||
|
|
||||||
|
dx = Nxfrom;
|
||||||
|
dx = (dx>(Nxto-offsetx)) ? (Nxto-offsetx) : dx;
|
||||||
|
dx = (dx<0) ? 0 : dx;
|
||||||
|
|
||||||
|
dy = Nyfrom;
|
||||||
|
dy = (dy>(Nyto-offsety)) ? (Nyto-offsety) : dy;
|
||||||
|
dy = (dy<0) ? 0 : dy;
|
||||||
|
|
||||||
|
N = dx*dy;
|
||||||
|
|
||||||
|
Is = N/nthreads; Is = (Is<1) ? 1 : N;
|
||||||
|
I0 = (threadnum)*Is;
|
||||||
|
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
||||||
|
|
||||||
|
for(I=I0;I<I1;I++)
|
||||||
|
{
|
||||||
|
Ix = I%dx;
|
||||||
|
Iy = I/dx;
|
||||||
|
|
||||||
|
Ia = Ipto + Npto*((Ix+offsetx) + Nxto*(Iy+offsety));
|
||||||
|
Ib = Ipfrom + Npfrom*(Ix + Nxfrom*Iy);
|
||||||
|
|
||||||
|
datato[Ia] = datafrom[Ib];
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void amsimage_plane_copy(
|
||||||
|
uint8_t *datato,
|
||||||
|
int Ipto,
|
||||||
|
int Npto,
|
||||||
|
int Nxto,
|
||||||
|
int Nyto,
|
||||||
|
const uint8_t *datafrom,
|
||||||
|
int Ipfrom,
|
||||||
|
int Npfrom,
|
||||||
|
int Nxfrom,
|
||||||
|
int Nyfrom,
|
||||||
|
int offsetx,
|
||||||
|
int offsety
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int dx,dy;
|
||||||
|
int64_t N;
|
||||||
|
|
||||||
|
if(datato==NULL) return;
|
||||||
|
if(datafrom==NULL) return;
|
||||||
|
|
||||||
|
dx = Nxfrom;
|
||||||
|
dx = (dx>(Nxto-offsetx)) ? (Nxto-offsetx) : dx;
|
||||||
|
dx = (dx<0) ? 0 : dx;
|
||||||
|
|
||||||
|
dy = Nyfrom;
|
||||||
|
dy = (dy>(Nyto-offsety)) ? (Nyto-offsety) : dy;
|
||||||
|
dy = (dy<0) ? 0 : dy;
|
||||||
|
|
||||||
|
N = dx*dy;
|
||||||
|
|
||||||
|
threaded_execute(
|
||||||
|
amsimage_plane_copy_tf,
|
||||||
|
N,
|
||||||
|
datato,
|
||||||
|
Ipto,Npto,Nxto,Nyto,
|
||||||
|
datafrom,
|
||||||
|
Ipfrom,Npfrom,Nxfrom,Nyfrom,
|
||||||
|
offsetx,offsety
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void amsimage_planeregion_set_tf(
|
||||||
|
int threadnum,
|
||||||
|
int nthreads,
|
||||||
|
uint8_t *data,
|
||||||
|
int Np, int Nx, int Ny,
|
||||||
|
int Ip,
|
||||||
|
int x0, int y0,
|
||||||
|
int x1, int y1,
|
||||||
|
uint8_t val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int64_t I,I0,I1,Is,N,Ix,Iy;
|
||||||
|
int dx,dy;
|
||||||
|
|
||||||
|
dx = (x1-x0); dy = (y1-y0);
|
||||||
|
dx = (dx<0) ? 0 : dx;
|
||||||
|
dy = (dy<0) ? 0 : dy;
|
||||||
|
N = dx*dy;
|
||||||
|
|
||||||
|
Is = N/nthreads; Is = (Is<1) ? 1 : N;
|
||||||
|
I0 = (threadnum)*Is;
|
||||||
|
I1 = (threadnum<nthreads-1) ? (threadnum+1)*Is : N;
|
||||||
|
|
||||||
|
for(I=I0;I<I1;I++)
|
||||||
|
{
|
||||||
|
Ix = I%dx;
|
||||||
|
Iy = I/dx;
|
||||||
|
|
||||||
|
data[Ip + Np*(Ix+x0) + Np*Nx*(Iy+y0)] = val;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void amsimage_planeregion_set(
|
||||||
|
uint8_t *data,
|
||||||
|
int Np, int Nx, int Ny,
|
||||||
|
int Ip,
|
||||||
|
int x0, int y0,
|
||||||
|
int x1, int y1,
|
||||||
|
uint8_t val
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int dx,dy;
|
||||||
|
int64_t N;
|
||||||
|
|
||||||
|
if(data==NULL) return;
|
||||||
|
|
||||||
|
dx = (x1-x0); dy = (y1-y0);
|
||||||
|
dx = (dx<0) ? 0 : dx;
|
||||||
|
dy = (dy<0) ? 0 : dy;
|
||||||
|
N = dx*dy;
|
||||||
|
|
||||||
|
threaded_execute(
|
||||||
|
amsimage_planeregion_set_tf,
|
||||||
|
N,
|
||||||
|
data, Np,Nx,Ny, Ip,
|
||||||
|
x0, y0, x1, y1,
|
||||||
|
val
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}; //end namespace imglib4
|
}; //end namespace imglib4
|
||||||
}; //end namespace ams
|
}; //end namespace ams
|
@ -7,7 +7,7 @@ int main(int argc, char* argv[])
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
//amscppimglib4_test1();
|
//amscppimglib4_test1();
|
||||||
amscppimglib4_test2();
|
//amscppimglib4_test2();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
Reference in New Issue
Block a user