服务器之家

服务器之家 > 正文

C语言实现bmp图像平移操作

时间:2022-02-15 17:04     来源/作者:@leozhang

平移变换是一种几何变换。平移的公式为:x1=x0+t,y1=y0+t,其中(x0,y0)是原图像中的坐标,(x1,y1)是经过平移变换后的对应点的坐标。
在编程中,先将处理后图像的所有区域赋值为白色,然后找出平移后显示区域的左上角点(x0,y0)和右下角点(x1,y1),分以下几种情况处理:
先看x方向(width为图像的宽度)
(1)t<=-width,图像向左移动,此时图像完全移除了显示区域,所以不做任何处理;
(2)-width<t<=0,图像向左移动,图像区域的x范围为0~width-|t|,对用于原图像的范围为|t|~width;
(3)0<t<width,图像右移,图像的x范围是t~width,对应于原图的范围是0~width-t;
(4)t>=width,图像向右移动且完全移出了显示区域,因此不做处理。

上下平移的方法与左右移动相同。

左右平移C语言代码如下:

// left_right_translation.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
#include<stdio.h>
#include<math.h>

int _tmain(int argc, _TCHAR* argv[])
{
int width;
int height;
RGBQUAD *pTableColor;
unsigned char *pBmpBuf1,*pBmpBuf2;

BITMAPFILEHEADER bfhead;
BITMAPINFOHEADER bihead;

//读出源图像的信息
FILE *fpr=fopen("E:\\picture\\dog.bmp","rb");
if(fpr==0)
return 0;
fread(&bfhead,14,1,fpr);
fread(&bihead,40,1,fpr);
width=bihead.biWidth;
height=bihead.biHeight;
int LineByte=(width*8/8+3)/4*4;
pTableColor=new RGBQUAD[256];
fread(pTableColor,sizeof(RGBQUAD),256,fpr);
pBmpBuf1=new unsigned char[LineByte*height];
fread(pBmpBuf1,LineByte*height,1,fpr);
fclose(fpr);
//将处理后的图像赋值为白色
pBmpBuf2=new unsigned char[LineByte*height];
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
{
 unsigned char *p;
 p=(unsigned char*)(pBmpBuf2+LineByte*i+j);
 (*p)=255;
}

//左右平移功能的实现
int t;
printf("请输入左平移或右平移的大小t(左移t<0,右移t>0):");
scanf("%d",&t);
int k=abs(t);
printf("%d",k);
if(t<0)
{
if(t>=(-width))
{
 for(int i=0;i<height;i++)
  for(int j=0;j<(width-k);j++)
 {
  unsigned char *p1,*p2;
  p1=pBmpBuf1+LineByte*i+j+k;
  p2=pBmpBuf2+LineByte*i+j;
  (*p2)=(*p1);
 }
}
}
else 
{
if(t<=width)
{

 for(int i=0;i<height;i++)
  for(int j=k;j<width;j++)
  {
   unsigned char *p1,*p2;
   p1=pBmpBuf1+LineByte*i+j-k;
   p2=pBmpBuf2+LineByte*i+j;
   (*p2)=(*p1);
  }

}

}
//保存处理后的图像
FILE *fpw=fopen("dog.bmp","wb");
fwrite(&bfhead,14,1,fpw);
fwrite(&bihead,40,1,fpw);
fwrite(pTableColor,sizeof(RGBQUAD),256,fpw);
fwrite(pBmpBuf2,LineByte*height,1,fpw);
fclose(fpw);



return 0;
}

原图:

C语言实现bmp图像平移操作

向左平移100个像素后图像:

C语言实现bmp图像平移操作

向右移动200像素:

C语言实现bmp图像平移操作

原文链接:https://blog.csdn.net/u011450295/article/details/38322573

标签:

相关文章

热门资讯

蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部