在C中将XImage写入.bmp文件

2024-02-17

我正在使用以下代码将 XImage 写入文件“bitmap0.bmp”,但是当我在 fedora 中使用 imageViewer 打开新创建的文件时,它会给出“文件过早结束”错误并且不显示任何内容。谁能指出以下代码中的问题吗?

typedef struct tagBITMAPFILEHEADER {
WORD    bfType;
DWORD   bfSize;
WORD    bfReserved1;
WORD    bfReserved2;
DWORD   bfOffBits;

位图文件头;

typedef struct tagBITMAPINFOHEADER{
DWORD  biSize;
LONG   biWidth;
LONG   biHeight;
WORD   biPlanes;
WORD   biBitCount;
DWORD  biCompression;
DWORD  biSizeImage;
LONG   biXPelsPerMeter;
LONG   biYPelsPerMeter;
DWORD  biClrUsed;
DWORD  biClrImportant;

位图头;

void saveXImageToBitmap(XImage *pImage)
{
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFOHEADER bmpInfoHeader;
FILE *fp;
static int cnt = 0;
int dummy;
char filePath[255];
memset(&bmpFileHeader, 0, sizeof(BITMAPFILEHEADER));
memset(&bmpInfoHeader, 0, sizeof(BITMAPINFOHEADER));
bmpFileHeader.bfType = 0x4D42;
bmpFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +  pImage->width*pImage->height*4;
bmpFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmpFileHeader.bfReserved1 = 0;
bmpFileHeader.bfReserved2 = 0;

bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfoHeader.biWidth = pImage->width;
bmpInfoHeader.biHeight = pImage->height;
bmpInfoHeader.biPlanes = 1;
bmpInfoHeader.biBitCount = 32;
dummy = (pImage->width * 3) % 4;
if((4-dummy)==4)
    dummy=0;
else
    dummy=4-dummy;
bmpInfoHeader.biSizeImage = ((pImage->width*3)+dummy)*pImage->height;
bmpInfoHeader.biCompression = 0;
bmpInfoHeader.biXPelsPerMeter = 0;
bmpInfoHeader.biYPelsPerMeter = 0;
bmpInfoHeader.biClrUsed = 0;
bmpInfoHeader.biClrImportant = 0;

sprintf(filePath, "bitmap%d.bmp", cnt++);
fp = fopen(filePath,"wb");

if(fp == NULL)
    return;

fwrite(&bmpFileHeader, sizeof(bmpFileHeader), 1, fp);
fwrite(&bmpInfoHeader, sizeof(bmpInfoHeader), 1, fp);
fwrite(pImage->data, 4*pImage->width*pImage->height, 1, fp);
fclose(fp);

}


谢谢用户786653。我检查了我的结构。他们正在被垫上垫子。我添加了

#pragma pack (1)

在结构中,现在工作正常。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在C中将XImage写入.bmp文件 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • JavaFX ImageView 未更新

    因此 我尝试将图像加载并保存到 imageView 中 其中图像的位置是通过文件浏览器选择的 我已经为此工作好几天了 如果我不能解决这个问题 我就会中风 我已经尝试了我能想到的一切 预先感谢您的帮助 UPDATED 这是我的主要课程 pub
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • Rails 验证搜索参数

    我有一个相当安静的 API 但正在努力弄清楚如何干净地实现搜索 我希望能够搜索两个日期时间之间的所有记录 日期时间最多允许相隔 6 小时 目前在我的控制器方法中我有以下内容 required params start time end ti
  • DatatypeProperty、ObjectProperty 和FunctionalProperty 之间有什么区别,什么时候应该使用它们?

    在编写本体时 有几种非常常用的类型 包括 数据类型属性 对象属性 功能特性 反函数性质 前三个看起来像是以一组特定的方式使用 但我发现我对它们的想法受到了我在 FOAF 中的使用方式的挑战 它们分别在什么时候应该使用或者什么时候不应该使用
  • 使用 OpenSSL 相互身份验证始终成功

    我正在使用 openssl 和 zmq 编写服务器和客户端 我的客户端和服务器需要相互身份验证 但我设置后SSL CTX set verify ssl ctx SSL VERIFY FAIL IF NO PEER CERT NULL 在服务
  • 隐式将 List 转换为 List

    我正在使用 Linq to Entities 有一个实体 Order 其中有一个可为空的列 SplOrderID 我查询我的订单列表为 List
  • 无法从 nginx 获取第一个请求的 uid

    我已经在 nginx 中安装了 uid 模块 还添加了与 uid 相关的配置 userid on userid name uid userid expires 365d userid p3p policyref w3c p3p xml CP
  • 如何从基类(非抽象类)调用重载函数?

    DVD类继承了Media类 比基类多了一个变量 我声明一个指针 Media ptr new DVD 我想打印出 DVD 的内容 因此以下代码可以按预期工作 ptr gt print cout 但是使用重载的 cout lt lt ptr l
  • 如何在张量流中按元素方式将张量的每一行乘以其余行

    我有一个像这样的张量 tf docs tf constant 0 2 1 1 2 2 2 1 3 5 2 2 dtype tf int32 我需要按元素将每一行乘以其余行 然后对结果求和 完成第一行后 我们将处理第二行和其余行 然后 所以结
  • 无点动态函数组合

    我正在尝试将这个函数重构为无意义的 function siblings me return R pipe family R reject equalsMe me me 我想通过me到管道中的函数以及值family返回 尝试了一些事情R us
  • 使用带有 Pathogen 的 .vim 插件

    我想使用 lustyjuggler 和 lustyExplorer 它们是 vim 插件 但我希望我们的 Pathogen 来管理它们 通常我解压 vim 插件 整个文件夹结构进入 vim bundle 但对于 lustyJuggler 和
  • 从另一个基于应用程序的类继承 UWP 应用程序类时,名称“AppClass”不存在于命名空间“...”中

    我想要实现的只是继承 UWP App 类 而不是从 Windows UI Xaml Application 类继承 而是从某个基类继承 从 标准 类继承 但是 当我这样做时 namespace MyNamespace sealed part
  • 单例时间跨多个区域触发 Azure Function

    我有一个时间触发的 Azure 函数部署在多个区域中 我希望在它们之间具有单例行为 例如 如果这些区域是美国西部和欧洲中部 我希望每次只运行其中一个区域 这能实现吗 As the 文档 https learn microsoft com e
  • 安装设备所有者应用程序的更新

    有谁知道更新发生时通过 Google Play 分发的设备所有者应用程序的生产行为是什么 正如我们所知 安装设备所有者应用程序涉及一些动机并且并不容易 重置为出厂默认设置 然后通过 NFC 为设备提供第二个设备等 因此 即使我们认为这一步已
  • g++ 两次链接同一个库会出现问题吗?

    我注意到 当我使用 gcc 制作应用程序并在链接阶段查看输出时 我看到以下库包含两次 home rb01 opt trx HEAD gcc 4 2 4 lib lib64 libstdc so 所以我只是想知道这是 g gcc 的问题还是第
  • 有什么解决方案可以将向量解包为 C++ 中的函数参数吗?

    我实际上正在考虑类似于 python 中的 运算符的东西 如下所示 args 1 2 4 f args C 中有类似的解决方案吗 我能想到的如下 template
  • NetBeans + GWT 2.2.0 + Maven编译问题

    我正在尝试使用 NetBeans 6 9 中的 Google Web Toolkit 创建 Maven Web 应用程序项目 我已按照该视频中显示的步骤进行操作 http www youtube com watch v M iVZ5TJ21
  • 我可以更改点图上的一个标记大小吗?

    使用 Seaborn 的pointplot我创建了以下图像 我想知道是否可以将每个标记的大小更改为唯一值 该图像是通过调用制作的 sns pointplot x Partying y Province ci 95 data df join
  • 发布表单时的 post 与 put

    当评估表单是否已提交时 我检查方法是否为 post 而不是 get 有人告诉我 这是一个好方法 可以了解表单是通过单击 提交 按钮提交的 而不仅仅是由在 url 中传递数据的脚本提交的 put 方法怎么样 看起来和 post 很相似 是否可
  • AngularJS $location 没有模板

    我想使用 locationProviderAngularJS 中的服务 无需在我的中渲染新的 HTML 模板ng view 我有一个div通过按需显示的元素ng show绑定到数据元素的存在 我想通过以下方式将其连接到浏览器位置 locat
  • 使用三元运算符的缺点

    我的源代码中有以下语句 int tableField1 int tableField2 int propertyField1 int propertyField2 if tableField1 null propertyField1 tab
  • 在C中将XImage写入.bmp文件

    我正在使用以下代码将 XImage 写入文件 bitmap0 bmp 但是当我在 fedora 中使用 imageViewer 打开新创建的文件时 它会给出 文件过早结束 错误并且不显示任何内容 谁能指出以下代码中的问题吗 typedef