📄 imgprocessing.cpp
字号:
#include "stdafx.h"
#include "imgProcessing.h"
#include <math.h>
BOOL imageMoving(CDIB& img,int mx,int my)
{
int w,h;
int i,j,u,v;
CDIB img_o;
if(img.getDIB()==NULL) return false;
img_o=img;
w=img.getDIB()->w;
h=img.getDIB()->h;
//---------------------------------------------------
//img初始化
for(j=0;j<h;j++){
for(i=0;i<w;i++){
img.pix24(i,j).B=0;
img.pix24(i,j).G=0;
img.pix24(i,j).R=0;
}
}
//--------------------------------------------------
//图像平移
for(j=0;j<h;j++){
for(i=0;i<w;i++){
u=i-mx;
v=j-my;
if(u>=0 && u<w && v>=0 && v<h){
img.pix24(i,j).B=img_o.pix24(u,v).B;
img.pix24(i,j).G=img_o.pix24(u,v).G;
img.pix24(i,j).R=img_o.pix24(u,v).R;
}
}
}
return true;
}
BOOL scale_zeroOrder(CDIB& img,float k_x,float k_y)
{
int w,h;
int i,j,u,v;
double uu,vv;
CDIB img_o;
if(img.getDIB()==NULL) return false;
img_o=img;
w=img.getDIB()->w;
h=img.getDIB()->h;
//---------------------------------------------------
//img初始化
for(j=0;j<h;j++){
for(i=0;i<w;i++){
img.pix24(i,j).B=255;
img.pix24(i,j).G=255;
img.pix24(i,j).R=255;
}
}
//--------------------------------------------------
//图像放大
for(j=0;j<h;j++){
for(i=0;i<w;i++){
uu=i/k_x;
vv=j/k_y;
u=(int)ceil(uu+0.5);
v=(int)ceil(vv+0.5);
if(u>=0 && u<w && v>=0 && v<h){
img.pix24(i,j).B=img_o.pix24(u,v).B;
img.pix24(i,j).G=img_o.pix24(u,v).G;
img.pix24(i,j).R=img_o.pix24(u,v).R;
}
}
}
return true;
}
BOOL scale_oneOrder(CDIB& img,float k_x,float k_y)
{
int w,h;
int i,j,u,v;
double uu,vv;
CDIB img_o;
img_o=img;
w=img.getDIB()->w;
h=img.getDIB()->h;
//---------------------------------------------------
//img初始化
for(j=0;j<h;j++){
for(i=0;i<w;i++){
img.pix24(i,j).B=255;
img.pix24(i,j).G=255;
img.pix24(i,j).R=255;
}
}
//--------------------------------------------------
//图像放大
double a,b,g1,g2,tmp;
for(j=0;j<h;j++){
for(i=0;i<w;i++){
uu=i/k_x;
vv=j/k_y;
u=(int)ceil(uu);
v=(int)ceil(vv);
a=uu-u;
b=vv-v;
if(u>=0 && u<w && v>=0 && v<h){
g1=a*(img_o.pix24(u+1,v).B-img_o.pix24(u,v).B)+img_o.pix24(u,v).B;
g2=a*(img_o.pix24(u+1,v+1).B-img_o.pix24(u,v+1).B)+img_o.pix24(u,v+1).B;
tmp=b*(g2-g1)+g1;
if(tmp<0.0) tmp=0.0;
if(tmp>255.0) tmp=255.0;
img.pix24(i,j).B=(unsigned char)tmp;
g1=a*(img_o.pix24(u+1,v).G-img_o.pix24(u,v).G)+img_o.pix24(u,v).G;
g2=a*(img_o.pix24(u+1,v+1).G-img_o.pix24(u,v+1).G)+img_o.pix24(u,v+1).G;
tmp=b*(g2-g1)+g1;
if(tmp<0.0) tmp=0.0;
if(tmp>255.0) tmp=255.0;
img.pix24(i,j).G=(unsigned char)tmp;
g1=a*(img_o.pix24(u+1,v).R-img_o.pix24(u,v).R)+img_o.pix24(u,v).R;
g2=a*(img_o.pix24(u+1,v+1).R-img_o.pix24(u,v+1).R)+img_o.pix24(u,v+1).R;
tmp=b*(g2-g1)+g1;
if(tmp<0.0) tmp=0.0;
if(tmp>255.0) tmp=255.0;
img.pix24(i,j).R=(unsigned char)tmp;
/*
tmp=(1-a)*(1-b)*img_o.pix24(u,v).B+a*(1-b)*img_o.pix24(u,v+1).B+(1-a)*b*img_o.pix24(u+1,v).B+a*b*img_o.pix24(u+1,v+1).B;
if(tmp>255.0) tmp=255.0;
if(tmp<0.0) tmp=0.0;
img.pix24(i,j).B=(unsigned char)tmp;
tmp=(1-a)*(1-b)*img_o.pix24(u,v).G+a*(1-b)*img_o.pix24(u,v+1).G+(1-a)*b*img_o.pix24(u+1,v).G+a*b*img_o.pix24(u+1,v+1).G;
if(tmp>255.0) tmp=255.0;
if(tmp<0.0) tmp=0.0;
img.pix24(i,j).G=(unsigned char)tmp;
tmp=(1-a)*(1-b)*img_o.pix24(u,v).R+a*(1-b)*img_o.pix24(u,v+1).R+(1-a)*b*img_o.pix24(u+1,v).R+a*b*img_o.pix24(u+1,v+1).R;
if(tmp>255.0) tmp=255.0;
if(tmp<0.0) tmp=0.0;
img.pix24(i,j).R=(unsigned char)tmp;
*/
}
}
}
return true;
}
BOOL imageRotate(CDIB& img,double angle )
{
int lwidth ,lheight,newwidth,newheight,linebytes,newlinebytes,i,j,k;
float fangle;
int i0 , j0 ;
double fsina , fcosa , f1 , f2;
double fscrx1 , fscry1 , fscrx2 , fscry2 , fscrx3 , fscry3 , fscrx4 , fscry4 ;
double fdisx1 , fdisy1 , fdisx2 , fdisy2 , fdisx3 , fdisy3 , fdisx4 , fdisy4 ;
CDIB img_o ;
if( img.getDIB() ==NULL ) return false ;
lwidth = img.getDIB()->w ;
lheight = img.getDIB()->h ;
fangle = (angle/180.0)* 3.1415926 ;
fsina = sin(fangle) ;
fcosa = cos(fangle) ;
fscrx1 = -(lwidth-1)/2 ;
fscry1 = (lheight-1)/2 ;
fscrx2 = (lwidth-1)/2 ;
fscry2 = (lheight-1)/2 ;
fscrx3 = -(lwidth-1)/2 ;
fscry3 = -(lheight-1)/2 ;
fscrx4 = (lwidth-1)/2 ;
fscry4 = -(lheight-1)/2 ;
fdisx1 = fcosa * fscrx1 + fsina* fscry1 ;
fdisy1 = -fsina*fscrx1 + fcosa* fscry1 ;
fdisx2 = fcosa*fscrx2 + fsina*fscry2 ;
fdisy2 = -fsina*fscrx2 + fcosa*fscry2 ;
fdisx3 = fcosa*fscrx3 + fsina*fscry3 ;
fdisy3 = -fsina*fscrx3 + fcosa*fscry3 ;
fdisx4 = fcosa*fscrx4 + fsina*fscry4 ;
fdisy4 = -fsina*fscrx4 + fcosa*fscry4 ;
newwidth = fabs(fdisx4-fdisx1) > fabs(fdisx3-fdisx2)+0.5 ?fabs(fdisx4-fdisx1):fabs(fdisx3-fdisx2) +0.5 ;
newheight = fabs(fdisy4 - fdisy1 ) > fabs( fdisy3 - fdisy2 )+0.5 ? fabs(fdisy4 - fdisy1 ):fabs( fdisy3 - fdisy2 ) +0.5 ;
f1 = (-0.5)*(newwidth-1)*fcosa-0.5*(newheight-1)*fsina
+ 0.5 * (lwidth-1) ;
f2 = 0.5*(newwidth-1)*fsina - 0.5*(newheight-1)*fcosa
+ 0.5 *(lheight-1) ;
img_o.create( newwidth ,newheight ,24) ;
for( i = 0 ; i < newheight ; i ++ )
{
for( j = 0 ; j < newwidth ; j ++ )
{
i0 = (int)(-((float)j)*fsina + ((float)i)*fcosa+f2+0.5) ;
j0 = (int)(((float)j)*fcosa + ((float)i)*fsina + f1 + 0.5) ;
if( (j0 >= 0 ) && ( j0<lwidth)&&(i0>=0)&&(i0<lheight))
{
img_o.pix24(j,i).B = img.pix24(j0,i0).B;
img_o.pix24(j,i).G = img.pix24(j0,i0).G;
img_o.pix24(j,i).R = img.pix24(j0,i0).R;
}
else
{
img_o.pix24(j,i).B = 255;
img_o.pix24(j,i).G =255;
img_o.pix24(j,i).R = 255;
}
}
}
img = img_o ;
return true ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -