首页 > 其他分享 >将bmp图片画到开发板的指定坐标上

将bmp图片画到开发板的指定坐标上

时间:2024-05-14 14:58:50浏览次数:32  
标签:fp 画到 int unsigned 开发板 bmp BMP include

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

/**********************************************************************************
*

  •      file name:  005_showbmp.c
    
  •      author   :  A13326981379@163.com
    
  •      date     :  2024/05/12
    
  •      function :  将bmp图片画到开发板上
    
  •      note     :  None          
    
  •      CopyRight (c) 2024-2024  A13326981379@163.com    All Right Reseverd
    
  • *******************************************************************************/
#pragma pack(1)

// 定义BMP文件头部结构
typedef struct{
	unsigned short bfType;
	unsigned int   bfSize;
	unsigned short bfReserved1;
	unsigned short bfReserved2;
	unsigned int   bfOffBits;
}BITMAPFILEHEADER;

typedef struct{
	unsigned int biSize;
	int biWidth;				//宽
	int biHeight;				//高
	unsigned short biPlanes;
	unsigned short biBitCount;	//色深
	unsigned int biCompression;
	unsigned int biSizeImage;
	int biXPelsPerMeter;
	int biYPelsPerMeter;
	unsigned int biClrUsed;
	unsigned int biClrImportant;
}BITMAPINFOHEADER;


#pragma pack()

/* *********************************************************************************
*

  •      函数名称  :  ShowBmp
    
  •      函数功能  :  将bmp图片画到开发板的指定坐标上
    
  •      函数参数  :                   
    
  •                  @name_path:图片路径
    
  •                  @x_offset :bmp图片在开发板坐标的X轴的偏移量
    
  •  				@y_offset :bmp图片在开发板坐标的Y轴的偏移量
    
  •  				@addr     :mmap的映射地址(作用是提高画图效率)
    
  •      返回结果  :  无
    
  •      函数作者  :  wq`
    
  •      创建日期  :  2024/05/12
    
  •      修改历史  :  无
    
  •      函数版本  :  V1.0
    
  •      注意事项  :  None
    
  • *******************************************************************************/
void ShowBmp(char *name_path,int x_offset,int y_offset,int *addr)
{
    //1.打开待显示的BMP图像  fopen
    FILE * bmp_fp = fopen(name_path,"rb");
	if (NULL == bmp_fp)
	{
		return;
	}
    //2.读取BMP文件的图像信息,获取BMP的宽和高
    BITMAPINFOHEADER headerinfo;
	fseek(bmp_fp,14,SEEK_SET);
	fread(&headerinfo,1,40,bmp_fp); //读取40字节
	printf("bmp width = %d,height = %d\n",headerinfo.biWidth,headerinfo.biHeight);

	//3.读取BMP图*片的颜色分量  800*480*3
	char bmp_buf[800*480*3] = {0};
	fread(bmp_buf,1,800*480*3,bmp_fp);
    //4.关闭BMP
    fclose(bmp_fp);
    // int i = x_offset;
	for (int y = 0; y <headerinfo.biHeight; y++)
	{
		for (int x = 0;x < headerinfo.biWidth ; ++x)
		{
			addr[800*(headerinfo.biHeight-y+y_offset-1) + x_offset+x] = bmp_buf[(y*headerinfo.biWidth+x)*3] | 
                                                                     bmp_buf[(y*headerinfo.biWidth+x)*3+1]<<8 |
                                                                     bmp_buf[(y*headerinfo.biWidth+x)*3+2]<<16;  
		}
	}
}

int main(int argc, char const *argv[])
{
	//1.打开LCD   open  
	int lcd_fd = open("/dev/fb0",O_RDWR);


	//2.对LCD进行内存映射  mmap
	int *lcd_mp = (int *)mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);

    //3.定义x_offset和y_offset存储偏移量
    int x_offset;
    int y_offset;
    printf("请输入一个在X轴的坐标(小于800)和请输入Y轴的坐标(小于480):");
    scanf("%d %d",&x_offset,&y_offset);
	//4.将图片的参数传给ShowBmp函数
	ShowBmp("./photo/Hz.bmp",x_offset,y_offset,lcd_mp);
	//5.关闭LCD
	close(lcd_fd);
    //6.取消映射
	munmap(lcd_mp,800*480*4);

	return 0;
}

标签:fp,画到,int,unsigned,开发板,bmp,BMP,include
From: https://www.cnblogs.com/wwwwariana/p/18191296

相关文章

  • BMP图片的复制#显示到显示屏
    复制BMP图片#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/mman.h>#include<stdlib.h>/**复制bmp图片***/#pragmapack(1)//定义BMP文件头部结构ty......
  • 设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真
    文件IO练习题设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。代码:/****************************************************************************************************************** * filename : Show......
  • 实现bmp格式图片的2倍缩小功能,并输出新的目标bmp格式文件。最后利用800*480的开发板,展
    /***********************************************************************************************************实现bmp格式图片的2倍缩小功能,并输出新的目标bmp格式文件。最后利用800*480的开发*板,展示缩放后的bmp文件****Copyright(c)2023-202418975491291......
  • 将bmp文件转换成JPEG(待修改,目前可转换但图片倒转)
    #include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/mman.h>/**IncludefileforusersofJPEGlibrary.*Youwillneedtoha......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—主机枚举从机所有服务和特征
    -------------------------------------------------------------------------------------------------------------------------------------在使用沁恒的CH582蓝牙芯片的过程中,有时需要主机去连接蓝牙从机进行通信,主机在使用过程中工作流程是: 1、 蓝牙初始化完成后,开始扫描......
  • 将任意bmp图片大小重新设置后生成新的bmp图片
    #include<stdio.h>#include<stdlib.h>#include<string.h>#pragmapack(1)/*必须在结构体定义之前使用,这是为了让结构体中各成员按1字节对齐*/typedefstructtagBITMAPFILEHEADER{ unsignedshortbfType; //保存图片类型。'BM' unsignedlongbfSize; //位图......
  • BMP格式图片缩放及在LCD屏幕展示练习
    /***@brief:实现bmp格式图片的2倍缩小功能,并输出新的目标bmp格式文件。最后利用800*480的开发板,展示缩放后的bmp文件因为只是进行函数练习,未采用函数封装的做法*@authorni456xinmie@163.com*@date2024/05/12*CopyRight(c)2023-2024ni456xinmie@1......
  • 在LCD屏内显示任意尺寸任意大小的bmp图像
    在LCD屏内显示任意尺寸任意大小的bmp图像定义结构体/******************************************************************************filename:ShowBmp.c*author:Dazz*date:2024-05-12*function:在LCD上显示任意大小任意尺寸的bmp图片*note......
  • 获取BMP图片件并在LCD屏上打开
    目录目录获取BMP文件获取信息进行缩放并产生新的BMP文件并在LCD屏上进行显示头文件BMP文件结构体主函数/********************************************************************filename:ChangeBmp.c*author:17666589210@163.com*date:2024-05-12*func......
  • bmp任意大小任意尺寸显示在lcd屏内
    IO编程在LCD屏内显示任意尺寸任意大小的图像/******************************************************************************filename:2024-05-12_ShowBmp.c*author:tongyaqi1110@163.com*date:2024-05-12*function:在LCD上显示任意大小任意尺......