文件IO-在屏幕上显示图像

打印 上一主题 下一主题

主题 1759|帖子 1759|积分 5277

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在屏幕上输出行字节为4的整数倍的bmp格式的图像,通过键盘指定要显示的文件名称,屏幕尺寸为1024*600
  1. /**************************************************************************
  2. *
  3. *
  4. * 设计在屏幕指定位置显示图像的接口
  5. * author:jindouliu2024@163.com
  6. * date:2025.4.18
  7. *
  8. *
  9. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  10. * **************************************************************************/
复制代码
[code]#include  #include #include #include #include #include#include#include#include#include #pragma pack(1)typedef struct tagBITMAP_FILE_HEADER{        short        bfType;//文件标识        int          bfSize;//文件大小        short        bfReserved1;//生存字        short        bfReserved2;//生存字        int          bfOffBits;//文件指示器偏移量相较于文件开头} bpFile_Header, *PbpFile_Header;typedef struct tagBITMAPINFOHEADER{        int          bpSize;//图像描述信息块的大小        int          bpWidth;//图像宽度        int          bpHeight;//图像高度        short        bpPlanes;//图像的plane总数(恒为1)        short        bpBitCount;//记录颜色的位数取值1(双色),4,6,24,32        int          bpCompression;//数据压缩方式(0:不压缩;1:8位压缩;2:4位压缩)        int          bpSizeImage;//图像区数据的大小,必须是4的倍数        int          bpXPelsPerMeter;//水平每米有多少像素,在装备无关位图中,填写00H        int          bpYPelsPerMeter;//垂直每米有多少像素,在装备无关位图中,填写00H        int          bpClrUsed;// 此图像所有的颜色数,不消,固定为0        int          bpClrImportant;// 紧张颜色数,不消,固定为0} bpINFO_HEADER, *PbpINFO_HEADER;#pragma pack()bool ShowPicture(char *name,int x,int y)//{        //界说存储图像信息的结构体        bpINFO_HEADER bp_infoheader;        //打开图像文件        FILE *fp = fopen(name,"rb");        if(fp == NULL){                printf("open picture failed\n ");                return -1;        }        //读取文件头信息        fseek(fp,14,SEEK_SET);        fread(&bp_infoheader,1,40,fp);        //界说存储数据的数组        char info_buf[bp_infoheader.bpWidth*bp_infoheader.bpHeight*3];        //读取图像信息        fread(info_buf,1,bp_infoheader.bpWidth*bp_infoheader.bpHeight*3,fp);        printf("width = %d,heigth =%d",bp_infoheader.bpWidth,bp_infoheader.bpHeight);        //关闭图像文件        fclose(fp);        //打开屏幕文件        int lcd_dp = open("/dev/fb0",O_RDWR);        //将图像信息写入mmap        //申请mmap的空间        short *lcd_mp = (short *)mmap(NULL,1024*600*2,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_dp,0);        //按高度扫描        int i=0;        short data=0;        for(int heigth =  x+bp_infoheader.bpHeight-1;heigth >= x ;heigth--){                //按宽度扫描                for(int width = y;width < y+bp_infoheader.bpWidth;width++){                        //写入像素值                        data = (info_buf/8)|((info_buf[i+1]/4)
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表