设为首页 加入收藏

TOP

图像编程学习笔记2――bmp位图平移 (四)
2014-11-23 19:09:44 来源: 作者: 【 】 浏览:45
Tags:图像 编程 学习 笔记 bmp 位图 平移
- srcX[0]; //有图区域的宽度
//y的和x类似,就不加注释了
if(ty <= -height)
yVisible = FALSE;
else if(ty <= 0)
{
dstY[0] = 0;
dstY[1] = height + ty;
}
else if(ty < height)
{
dstY[0] = ty;
dstY[1] = height;
}
else
yVisible = FALSE;
srcY[0] = dstY[0] - ty;
srcY[1] = dstY[1] - ty;
int rectHeight = srcY[1] - srcY[0];
int lineBytes = (width * bmpInfoHeader.biBitCount + 31) / 32 * 4; //每行所占的字节数,必须为4的倍数
if(xVisible && yVisible)
{
for(int i = 0; i < rectHeight; i++ )
{
//pTemp指向要拷贝的那一行的最左边的象素对应在原图中的位
//置。特别要注意的是,由于.bmp是上下颠倒的,
pTemp = pBmpData + (height - 1 - (srcY[0] + i)) * lineBytes + srcX[0];
//pTemp1指向要拷贝的那一行的最左边的象素对应在新图中的位置。同样要注意上面的问题。
pTemp1 = pBmpData1 + (height - 1 - (dstY[0] + i)) * lineBytes + dstX[0];
memcpy(pTemp1,pTemp,rectWidth); //从pTemp中复制大小为rectWidth的数据到pTemp1,这里就是copy图像的一行数据
}
}
}
/**
* 函数名: writeBmp
* 功 能: 新建一个bmp文件,把平移后的图像信息写入,生成一个新的bmp
*/
void writeBmp()
{
char writeBmpName[] = "new.bmp";
FILE *fp = fopen(writeBmpName,"wb"); //以二进制写方式打开指定的图像文件
if(NULL == fp)
{
cout<<"file not exist!";
return ;
}
//写入BMP文件数据
fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
fwrite(&bmpInfoHeader,sizeof(BITMAPINFOHEADER),1,fp);
fwrite(pColorTable,sizeof(RGBQUAD),256,fp);
fwrite(pBmpData1,sizeof(char),imgSize,fp);
fclose(fp);
//释放内存
delete []pColorTable;
delete []pBmpData1;
delete []pBmpData;
}
/**
* 函数名: work
* 功 能: 处理
*/
void work()
{
int x,y;
char readBmpName[] = "nv1.bmp";
if ( !readBmp(readBmpName) )
printf("Bmp file reads faliure");
printf("the distance of translation,cx,cy:"); //读入平移的x和y
scanf("%d %d",&x,&y);
translation(x,y);
writeBmp();
}
int main()
{
work();
return 0;
}
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC++获取屏幕大小第二篇 物理大小.. 下一篇VC++ 树的孩子兄弟表示法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: