当前位置: 首页 > wzjs >正文

专注做一家男生最爱的网站百度搜索引擎优化详解

专注做一家男生最爱的网站,百度搜索引擎优化详解,网站界面设计修改要多少钱,福州建站模板厂家代码&#xff1a; /* 标准输入输出头文件&#xff0c;提供文件操作和输入输出函数&#xff08;如printf&#xff09;*/ #include <stdio.h>/* 文件控制操作头文件&#xff0c;提供文件打开模式&#xff08;如O_RDWR&#xff09;和文件控制函数 */ #include <fcntl.h&…

代码:

/* 标准输入输出头文件,提供文件操作和输入输出函数(如printf)*/
#include <stdio.h>/* 文件控制操作头文件,提供文件打开模式(如O_RDWR)和文件控制函数 */
#include <fcntl.h>/* 设备I/O控制头文件,提供ioctl函数用于设备控制 */
#include <sys/ioctl.h>/* 内存映射操作头文件,提供mmap/munmap内存映射相关函数 */
#include <sys/mman.h>/* Framebuffer设备驱动头文件,定义fb_var_screeninfo等结构体 */
#include <linux/fb.h>/* 标准整数类型头文件,定义uint16_t、uint32_t等跨平台类型 */
#include <stdint.h>/* 网络字节序转换头文件,提供htonl等字节序转换函数 */
#include <arpa/inet.h>/* UNIX标准函数头文件,提供close、lseek等系统调用 */
#include <unistd.h> /* 标准库头文件,提供exit等通用函数 */
#include <stdlib.h>/* 文件状态头文件,提供fstat等文件信息函数 */
#include <sys/stat.h>/*----------------------------------------------------------全局变量定义
----------------------------------------------------------*/
char *fbp;                      // 映射到framebuffer的指针(使用char*便于字节级操作)
int fb_device;                  // Framebuffer设备文件描述符
struct fb_var_screeninfo vinfo; // 可变屏幕参数(分辨率、色深等)
struct fb_fix_screeninfo finfo; // 固定屏幕参数(物理地址、长度等)
long screensize;                // 屏幕缓冲区总大小/*----------------------------------------------------------BMP文件头结构定义
----------------------------------------------------------*/
#pragma pack(push, 1)           // 设置字节对齐为1字节,避免结构体填充
typedef struct {uint16_t bfType;            // 文件类型,必须为"BM"(0x4D42)uint32_t bfSize;            // 文件总大小(字节)uint16_t bfReserved1;       // 保留字段1uint16_t bfReserved2;       // 保留字段2uint32_t bfOffBits;         // 像素数据偏移量(从头开始到数据的字节数)
} BITMAPFILEHEADER;typedef struct {uint32_t biSize;        // 本结构体大小(通常40字节)int32_t  biWidth;int32_t  biHeight;uint16_t biPlanes;uint16_t biBitCount;uint32_t biCompression;uint32_t biSizeImage;int32_t  biXPelsPerMeter;int32_t  biYPelsPerMeter;uint32_t biClrUsed;uint32_t biClrImportant;
} BITMAPINFOHEADER;
#pragma pack(pop)        // 恢复默认字节对齐// BMP显示函数
void show_bmp(const char* img_path) {// 打开文件int fd = open(img_path, O_RDONLY);if (fd < 0) {perror("Error opening BMP file");return;}// 读取文件头BITMAPFILEHEADER bmfh;if (read(fd, &bmfh, sizeof(bmfh)) != sizeof(bmfh)) {perror("Error reading BMP header");close(fd);return;}// 验证BMP格式if (bmfh.bfType != 0x4D42) { // "BM"printf("Not a valid BMP file\n");close(fd);return;}// 读取信息头BITMAPINFOHEADER bmih;if (read(fd, &bmih, sizeof(bmih)) != sizeof(bmih)) {perror("Error reading BMP info");close(fd);return;}// 验证图像尺寸if (bmih.biWidth != vinfo.xres || abs(bmih.biHeight) != vinfo.yres) {printf("BMP尺寸不匹配: %dx%d,屏幕: %dx%d\n",bmih.biWidth, abs(bmih.biHeight),vinfo.xres, vinfo.yres);close(fd);return;}// 验证位深度if (bmih.biBitCount != 24) {printf("仅支持24位BMP格式\n");close(fd);return;}// 计算行填充字节int row_size = ((bmih.biWidth * 3 + 3) & ~3);uint8_t* row_buffer = malloc(row_size);// 读取像素数据(BMP存储顺序为从下到上)for (int y = bmih.biHeight > 0 ? (bmih.biHeight-1) : 0; bmih.biHeight > 0 ? (y >= 0) : (y < vinfo.yres); bmih.biHeight > 0 ? y-- : y++) {lseek(fd, bmfh.bfOffBits + y * row_size, SEEK_SET);read(fd, row_buffer, row_size);// 屏幕Y坐标计算int screen_y = bmih.biHeight > 0 ? (bmih.biHeight - 1 - y) : y;for (int x = 0; x < vinfo.xres; x++) {uint8_t* pixel = &row_buffer[x * 3];uint32_t color = 0;uint16_t color_16 = 0;switch (vinfo.bits_per_pixel) {case 16:color_16 = ((pixel[2] >> 3) << 11) | ((pixel[1] >> 2) << 5) | (pixel[0] >> 3);break;case 32:color = (0xFF << 24) | (pixel[2] << vinfo.red.offset) |(pixel[1] << vinfo.green.offset) |(pixel[0] << vinfo.blue.offset);break;default:printf("不支持的像素格式\n");free(row_buffer);close(fd);return;}// 修改location计算中的y为screen_ylong location = (x + vinfo.xoffset) * (vinfo.bits_per_pixel / 8) + (screen_y + vinfo.yoffset) * finfo.line_length;if (vinfo.bits_per_pixel == 16) {*((uint16_t*)(fbp + location)) = color_16;} else {*((uint32_t*)(fbp + location)) = color;}}}free(row_buffer);close(fd);
}int main(int argc, char *argv[]) {// 参数检查if (argc < 2) {printf("用法: %s <图片路径>\n", argv[0]);return 1;}// 1. 打开FrameBuffer设备fb_device = open("/dev/fb0", O_RDWR);if (fb_device == -1) {perror("Error opening framebuffer");return 1;}// 2. 获取屏幕信息if (ioctl(fb_device, FBIOGET_FSCREENINFO, &finfo)) {perror("Error reading fixed info");close(fb_device);return 1;}if (ioctl(fb_device, FBIOGET_VSCREENINFO, &vinfo)) {perror("Error reading variable info");close(fb_device);return 1;}// 3. 屏幕信息打印printf("\nFrameBuffer 信息:\n");printf("可视分辨率: %dx%d\n", vinfo.xres, vinfo.yres);printf("虚拟分辨率: %dx%d\n", vinfo.xres_virtual, vinfo.yres_virtual);printf("像素深度: %d bits/像素\n", vinfo.bits_per_pixel);printf("颜色格式: R%u-%u G%u-%u B%u-%u\n", vinfo.red.offset, vinfo.red.length,vinfo.green.offset, vinfo.green.length,vinfo.blue.offset, vinfo.blue.length);printf("行长度: %d 字节\n\n", finfo.line_length);// 4. 计算显存大小并映射到用户空间screensize = vinfo.xres_virtual * vinfo.yres_virtual * vinfo.bits_per_pixel / 8;fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fb_device, 0);if ((void *)fbp == MAP_FAILED) {perror("Error mmap framebuffer");close(fb_device);return 1;}show_bmp(argv[1]);sleep(3);// 6. 释放资源munmap(fbp, screensize);close(fb_device);return 0;
}

运行效果:

RGB屏幕显示neko.bmp图像。

http://www.dtcms.com/wzjs/512854.html

相关文章:

  • 公司网站制作公今日热搜
  • 域名备案不是网站公司做的江北seo页面优化公司
  • 上饶做网络营销推广搜索引擎seo外包
  • 黑马程序员培训靠谱吗网站优化外包
  • 邯郸网站设计怎么开发凡科建站代理登录
  • 宁波最新发布电脑优化系统的软件哪个好
  • 东莞做外贸网站北京网站营销seo方案
  • 美国做旅游网站如何创建网站教程
  • 做网站的收费标准独立站seo实操
  • 怎么做原创电影视频网站seo排名工具外包
  • 如何 网站收录百度seo价格
  • 建设网站德州nba中国官方网站
  • 免费域名申请教程独立站seo怎么做
  • 肇庆网站seo微信拓客的最新方法
  • 虎扑的网站是用什么技术做的搜索引擎优化简历
  • 博彩导航网站可以做吗个人建网站的详细步骤
  • 怎么用lofter做网站semester at sea
  • 计算机网站建设职业群网站建设需求模板
  • 动态ip地址做网站汕头网站建设公司
  • 汕头网站建设技术支持百度品牌广告是什么
  • 网站建设和销售有关吗制作网页的网站
  • 做直播网站找哪个网站网络公司主要做哪些
  • 网站建设用户画像例子百度竞价是seo还是sem
  • 用网站空间可以做有后台的网站吗宁波seo软件
  • 做导航网站不侵权吗代运营公司靠谱吗
  • 做游戏解说上传在什么网站好如何制作网页游戏
  • 浙江省建设厅网站资质迁移昆明seo排名外包
  • 丽水做网站的公司网络推广专员所需知识
  • 什么系统做购物网站好宁波seo营销
  • 网站客服是做什么的2023年新闻热点事件摘抄