#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include "bmp.h"
BYTE *Read8BitBmpFile2Img(const char * filename, int *width, int *height)
{
FILE * BinFile;
BITMAPFILEHEADER FileHeader;
BITMAPINFOHEADER BmpHeader;
BYTE *img;
int size;
int Suc = 1;
// Open File
*width = *height = 0;
if ((BinFile = fopen(filename, "rb")) == NULL) return NULL;
// Read Struct Info
if (fread((void *)&FileHeader, 1, sizeof(FileHeader), BinFile) != sizeof(FileHeader)) Suc = -1;
if (fread((void *)&BmpHeader, 1, sizeof(BmpHeader), BinFile) != sizeof(BmpHeader)) Suc = -1;
if (Suc == -1) { fclose(BinFile); return NULL; }
// Read Image Data
*width = (BmpHeader.biWidth + 3) / 4 * 4;
*height = BmpHeader.biHeight;
size = (BmpHeader.biWidth + 3) / 4 * 4 * BmpHeader.biHeight;
fseek(BinFile, FileHeader.bfOffBits, SEEK_SET);
if ((img = new BYTE[size]) != NULL)
{
if (fread(img, sizeof(BYTE), size, BinFile) != size)
{
fclose(BinFile);
delete[]img;
img = NULL;
return NULL;
}
}
fclose(BinFile);
return img;
}
int Write8BitImg2BmpFile(BYTE *img, int width, int height, const char * filename)
{
FILE * BinFile;
BITMAPFILEHEADER FileHeader;
BITMAPINFOHEADER BmpHeader;
BYTE p[4];
int i, Suc = 1;
// Open File
if ((BinFile = fopen(filename, "w+b")) == NULL) { return -1; }
// Fill the FileHeader
FileHeader.bfType = ((WORD)('M' << 8) | 'B');
FileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BmpHeader) + 256 * 4L;
FileHeader.bfSize = FileHeader.bfOffBits + width*height;
FileHeader.bfReserved1 = 0;
FileHeader.bfReserved2 = 0;
if (fwrite((void *)&FileHeader, 1, sizeof(BITMAPFILEHEADER), BinFile) != sizeof(BITMAPFILEHEADER)) Suc = -1;
// Fill the ImgHeader
BmpHeader.biSize = 40;
BmpHeader.biWidth = width;
BmpHeader.biHeight = height;
BmpHeader.biPlanes = 1;
BmpHeader.biBitCount = 8;
BmpHeader.biCompression = 0;
BmpHeader.biSizeImage = 0;
BmpHeader.biXPelsPerMeter = 0;
BmpHeader.biYPelsPerMeter = 0;
BmpHeader.biClrUsed = 0;
BmpHeader.biClrImportant = 0;
if (fwrite((void *)&BmpHeader, 1, sizeof(BmpHeader), BinFile) != sizeof(BmpHeader)) Suc = -1;
// write Pallete
for (i = 0, p[3] = 0; i<256; i++)
{
p[0] = p[1] = p[2] = i; // blue,green,red;
if (fwrite((void *)p, 1, 4, BinFile) != 4) { Suc = -1; break; }
}
// write image data
if (fwrite((void *)img, 1, width*height, BinFile) != width*height) Suc = -1;
// return;
fclose(BinFile);
return Suc;
}
void Threshold(BYTE *img, int width, int height, BYTE Thre)
{
int i;
int size, pointer;
BYTE LUT[256], *pBuf;
// init LUT-look up table
for (i = 0; i<Thre; i++) LUT[i] = 0;
for (i = Thre; i<256; i++) LUT[i] = 255;
// Binary image
pBuf = img;
size = width*height;
for (pointer = 0; pointer<size; ++pointer)
*(pBuf++) = LUT[*pBuf];
}
.whl
- 粉丝: 3960
- 资源: 4908
最新资源
- Git 分布式版本控制系统常见操作指南
- 电力市场出清程序 IEEE14节点考虑输电阻塞,求解机组边际电价和节点边际电价 采用拉格朗日乘子进行分析计算,目标函数为发电成本最小 运用matlab中的linprog()函数实现此程序,均为m
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 双层优化 大型电动汽车 时空调度 测试环境:MATLAB 关键词:双层优化,电动汽车,时空调度,配电网 考虑电动汽车有序充放电的机组组合和最优趋势,机组组合采用相同的线性化方法,采用二阶锥松弛的
- 基于MATLAB的四旋翼无人机PID控制
- 堆垛机-西门子PLC程序+输送线程序+触摸屏程序 物流仓储 涵盖通信,算法,运动控制,屏幕程序 实际项目程序 西门子S7-1200+G120+ET200S+劳易测激光测距 博途编程 采用用
- 分析储能接入对新能源消纳能力影响 目标函数:系统经济性最优包括燃料成本和弃风惩罚成本 约束:功率平衡,储能约束,机组出力上下限,机组爬坡约束,风电出力约束
- (matlab)三相并网逆变器svpwm控制+PI电流环控制(有参考文献) (1)符合入网电流谐波标准 (2)并网电流和电压同相 (3)采用锁相环PLL
- 三菱PlC程序大型项目QCPU+QD77MS16 项目说明如下: 1.包含一套完整的电气开发系统资料(包含plc程序,触摸屏程序,伺服模块设置程序,程序开发地址规划表) 2.这套开发程序是用一套完
- 基于遗传算法的配电网优化配置 软件:Matlab 介绍:分布式电源、无功补偿装置接入配电网,考虑配电网经济性、环境成本和电能质量为目标函数,使用遗传算法进行优化配置,在IEEE33节点系统进行了仿真验
- 遗传算法求解微电网日前调度 测试环境:MATLAB 用遗传算法求解电力系统简单日前调度问题,考虑微网发电成本的经济性,以微型燃气轮机发电成本、 储能运行维护成本和微网与主网之间买、卖电的交互成本为系统
- 直驱永磁风力发电机,基于Simulink建立了包括风力机、传 动系统、永磁同步发电机、整流逆变、电网等模块的永磁直驱风力发电机控制系统模型 附带文件说明
- 西门子modbus通讯 读取或写入仪表
- 三菱Q程序程序(某集团设备程序) 用三菱Q系列和威纶触摸屏编写 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释 由于程序代码可复制发后不可 此款为宏指令未加密
- 考虑降解成本的具有混合储能的微电网两层能源管理系统,采用了模型预测控制的方法
- 综合能源系统仿真,冷热电三联供仿真,simulink仿真
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈