征集错误

zxj911 2004-08-10 09:12:56
#include "EWBMPAPI.h"


//declare iner function
//declare global var
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFOHEADER bmpInfoHeader;
BYTE* pBMP;
BYTE* pDot;
LONG ByteNumPerLine = 0;


BYTE g_rgbQuad[64]={0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
0x00,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
0x80,0x00,0x00,0x00,0x80,0x00,0x80,0x00,
0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,
0xC0,0xC0,0xC0,0x00,0x00,0x00,0xFF,0x00,
0x00,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,
0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0x00};

#define DEFBMPAPI_REDCOLORLOW 0x09
#define DEFBMPAPI_REDCOLORHIGH 0x90
#define DEFBMPAPI_BLKCOLORLOW 0x00
#define DEFBMPAPI_BLKCOLORHIGH 0x00

//===================================================================
int EWBMP_ChkDatFile(int nWidth, int nHeight, char* fPathBlack, char* fPathRed);
int EWBMP_CreaHead(void);
int EWBMP_DoBkDat(char* fullFilePath,int nWidth, int nHeight, int nByte);
int EWBMP_DoRkDat(char* fullFilePath,int nWidth, int nHeight, int nByte);
int EWBMP_WriteToFile(char* fullFilePath,long size);

inline BOOL TestBit(BYTE num,int bit)
{
if(num>>bit&0x01==1)
return TRUE;
else
return FALSE;
}


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
//init
pBMP = NULL;
pDot = NULL;
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
break;
}
}
return TRUE;
}

//////////////////////////////////////////////////////////

int EWBMP_ChkDatFile(int nWidth, int nHeight, char* fPathBlack, char* fPathRed)
{
int nByte = 0;
int hFile;

if ( (nWidth < 0) || (nHeight < 0) )
{
//write log
return EWBMPAPIERR_SIZE;
}

//calculate total bmp data byte num
if ((nWidth * nHeight)%8 == 0)
nByte = nWidth * nHeight / 8;
else
nByte = 1 + (int)(nWidth * nHeight / 8);

hFile = _open(fPathBlack, _O_BINARY | _O_RDONLY);
if ( hFile == -1 )
{
//write log
return EWBMPAPIERR_FILEOPENB;
}
else
{
if (_filelength(hFile) < nByte)
{
//write log
_close( hFile);
return EWBMPAPIERR_FILELENB ;
}
}


if (fPathRed)
{
hFile = _open(fPathRed, _O_BINARY | _O_RDONLY);
if ( hFile == -1 )
{
//write log
return EWBMPAPIERR_FILEOPENR;
}
else
{
if (_filelength(hFile) < nByte)
{
//write log
_close( hFile);
return EWBMPAPIERR_FILELENR;
}
}
}
return 0;
}

int EWBMP_CreaHead(UINT nWidth,UINT nHeight,LONG size)
{
memset(&bmpFileHeader, 0 ,sizeof(bmpFileHeader));
memset(&bmpInfoHeader,0, sizeof(bmpInfoHeader));

bmpFileHeader.bfType = 0x4D42;
bmpFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(g_rgbQuad) + size;
bmpFileHeader.bfReserved1 = 0;
bmpFileHeader.bfReserved2 = 0;
bmpFileHeader.bfOffBits = 0x0076;

bmpInfoHeader.biSize = 0x28;
bmpInfoHeader.biWidth = nWidth;
bmpInfoHeader.biHeight = nHeight;
bmpInfoHeader.biSizeImage = bmpFileHeader.bfOffBits + size;
bmpInfoHeader.biCompression = BI_RGB;
bmpInfoHeader.biXPelsPerMeter = 0x0ec4;
bmpInfoHeader.biYPelsPerMeter = 0x0ec4;
bmpInfoHeader.biClrUsed = 0;
bmpInfoHeader.biBitCount = 0;

bmpInfoHeader.biPlanes = 0x01 ;
bmpInfoHeader.biBitCount = 0x04 ;


return 0;
}
int EWBMP_DoBkDat(char* fullFilePath,int nWidth, int nHeight, int nByte)
{
BYTE DotByte;
BYTE* pCurrentByte;

long nDotCount = 0;
int x,y;

FILE* fDot;
fDot = fopen(fullFilePath,"r+b");
fread( pDot, sizeof(BYTE),nByte, fDot );
fclose(fDot);

for (int i=0;i<nByte;i++)
{
DotByte = (*(pDot + i));
for (int m=0;m<8;m++)
{
x = nDotCount/nHeight;
y = nHeight - nDotCount%nHeight -1;

pCurrentByte = pBMP + y * ByteNumPerLine + (x/2);

if (TestBit(DotByte,m))
{
if (x % 2 == 1)
(*pCurrentByte) = (*pCurrentByte) & 0xF0 | DEFBMPAPI_BLKCOLORLOW;
else
(*pCurrentByte) = (*pCurrentByte) & 0x0F | DEFBMPAPI_BLKCOLORHIGH;
}
nDotCount ++ ;
}
}

return 0;
}
int EWBMP_DoRkDat(char* fullFilePath,int nWidth, int nHeight, int nByte)
{
BYTE DotByte;
BYTE* pCurrentByte;

long nDotCount = 0;
int x,y;

FILE* fDot;
fDot = fopen(fullFilePath,"r+b");
fread( pDot, sizeof(BYTE),nByte, fDot );
fclose(fDot);

for (int i=0;i<nByte;i++)
{
DotByte = (*(pDot + i));
for (int m=0;m<8;m++)
{
x = nDotCount/nHeight;
y = nHeight - nDotCount%nHeight -1;

pCurrentByte = pBMP + y * ByteNumPerLine + (x/2);

if (TestBit(DotByte,m))
{
if (x % 2 == 1)
(*pCurrentByte) = (*pCurrentByte) & 0xF0 | DEFBMPAPI_REDCOLORLOW;
else
(*pCurrentByte) = (*pCurrentByte) & 0x0F | DEFBMPAPI_REDCOLORHIGH;
}
nDotCount ++ ;
}
}

return 0;
}

int EWBMP_WriteToFile(char* fullFilePath,long size)
{
FILE* file = NULL;
file = fopen(fullFilePath,"w+b");

//write log
if (!file)
return EWBMPAPIERR_WRITEOPENERR;

fwrite( &bmpFileHeader, sizeof( bmpFileHeader ), 1, file );
fwrite( &bmpInfoHeader, sizeof( bmpInfoHeader ), 1, file );
fwrite( &g_rgbQuad, sizeof( g_rgbQuad ), 1, file );
fseek(file, 0x76, SEEK_SET);
fwrite( pBMP, size, 1, file );
fclose(file);
return 0;
}


_EWBMPAPI BOOL WINAPI WINAPI EWBMP_Dat2Bmp(UINT nWidth0, UINT nHeight0, char* lpBkDat, char* lpRdDat, char* lpBmp )
{
long size = 0;
long nWidth = 0;
long nHeight = 0;
long nByte = 0;
int iRet = -1;

nWidth = nHeight0;
nHeight = nWidth0;

iRet = EWBMP_ChkDatFile(nWidth, nHeight, lpBkDat , lpRdDat);
if (iRet != 0) return FALSE;

//calculate byte num per line
ByteNumPerLine = ((nWidth*4+31)&~31)/8;
size = ByteNumPerLine * nHeight ;

//create bmp head
EWBMP_CreaHead(nWidth,nHeight,size);

pBMP = (BYTE*)malloc(size);
if (!pBMP)
{
//writelog
iRet = EWBMPAPIERR_MALLOC ;
return FALSE;
}

//calculate total bmp data byte num
if ((nWidth * nHeight)%8 == 0)
nByte = nWidth * nHeight / 8;
else
nByte = 1 + (int)(nWidth * nHeight / 8);

pDot = (BYTE*)malloc(nByte);
if (!pDot)
{
//writelog
iRet = EWBMPAPIERR_MALLOC ;
return FALSE;
}

memset(pBMP,0xFF,size);
memset(pDot,0x00,nByte);

EWBMP_DoBkDat(lpBkDat,nWidth, nHeight,nByte);

if (lpRdDat)
EWBMP_DoRkDat(lpRdDat,nWidth, nHeight,nByte);

iRet = EWBMP_WriteToFile(lpBmp,size);
if (iRet != 0)
{
free(pBMP);
free(pDot);
return FALSE;
}

free(pBMP);
free(pDot);
return TRUE;
}
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanstar200 2004-08-10
  • 打赏
  • 举报
回复
_EWBMPAPI BOOL WINAPI WINAPI EWBMP_Dat2Bmp(UINT nWidth0, UINT nHeight0, char* lpBkDat, char* lpRdDat, char* lpBmp )
爲什麽要用2個WINAPI ??
我認爲一個都不必用
zxj911 2004-08-10
  • 打赏
  • 举报
回复
这是一段位图处理的程序。
我现在定义了以下的错误
//struct define area
#define EWBMPAPIERR_SIZE -1
#define EWBMPAPIERR_FILEOPENB -2
#define EWBMPAPIERR_FILELENB -3
#define EWBMPAPIERR_FILEOPENR -4
#define EWBMPAPIERR_FILELENR -5
#define EWBMPAPIERR_WRITEOPENERR -20
#define EWBMPAPIERR_MALLOC -21
请大家帮忙看看程序在那还有可能发生错误或异常。请指教
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源类型、分类和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧