一个问题(100分)

  • 主题发起人 主题发起人 lizheng
  • 开始时间 开始时间
L

lizheng

Unregistered / Unconfirmed
GUEST, unregistred user!
int i;
int *p = NULL
//必须为int,因为fgetc返回值为int,若定义为char,会有问题出现
FILE *bmpfp, *outfp;

if (OpenDialog1->Execute())
{
for (i = 0
i < OpenDialog1->Files->Count
i ++)
{
bmpfp = fopen(OpenDialog1->Files->Strings.c_str(), "rb");
if (bmpfp == NULL)
return;
if (fread((char*)&amp;FileHeader, 1, sizeof(BITMAPFILEHEADER), bmpfp) != sizeof(BITMAPFILEHEADER))//sizeof(BITMAPFILEHEADER)=14
ShowMessage("FileHeader Open Failed");
if (fread((char*)&amp;BmpInfoHeader, 1, sizeof(BITMAPINFOHEADER), bmpfp) != sizeof(BITMAPINFOHEADER))//sizeof(BITMAPINFOHEADER)=40
ShowMessage("BmpInfoHeader Open Failed");
bytes = FileHeader.bfSize
//width * BmpInfoHeader.biBitCount;
fseek(bmpfp, 54, SEEK_SET);
if ((p = (int *)malloc(bytes - 53)) == NULL)
return;
while((*(p + i) = fgetc(bmpfp)) != EOF) i ++;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~如果没有这一句,后面的错误就不会出现
fclose(bmpfp);
if (BmpInfoHeader.biBitCount != 1 &amp;&amp
BmpInfoHeader.biBitCount != 4 &amp;&amp
BmpInfoHeader.biBitCount != 8)
{
ShowMessage(OpenDialog1->FileName + "is not monochrome or 16 or 256 BMP file.");
if (BmpInfoHeader.biCompression == 0)
Image1->Picture->LoadFromFile(OpenDialog1->FileName);
return;
}
if (SaveDialog1->Execute())
~~~~~~~~~~~~~~~~~~~~~~~~~~出错!
outfp = fopen(SaveDialog1->FileName.c_str(), "wb");
......
 
for (i = 0
i < OpenDialog1->Files->Count
i ++)
while((*(p + i) = fgetc(bmpfp)) != EOF) i ++;
这两句一定要共用同一变量吗?你确定你的最外层循环的变量要在这里内部变化吗?
我总觉得有点不对,我想OpenDialog1->Files->Count跟bytes - 53大小可能不在同一个数量级上.....
不如你把你第二句改成这样试试?
int j=0;
while((*(p+j)=fgetc(bmpfp))!=EOF)j++;
 
to sonie:我好崇拜你啊,你是CB高手,我要拜你为师!!!
 
to yanzi_wy:?,讽刺我啊?
不过我最近答了着实答了一些cb的问题,
诸如cb->dephi,dephi->cb很多同志似乎总是不给分,灰心了
 
没有啊,我说的真心话!我用CB的,要向你学习!我要你的QQ号码!
 
呵呵,sonie到我这里来取分,总觉得cb是过渡性产品,vc可以做的,cb不一定做得好
cb能做的,delphi也一样能做。
 
to chenlili:你在啊,你去看看你的关于crm的例子,又是一石激起千层浪,另外一个则是蛮
冷清的,还不快听我的改题目名。
另:到哪里去取分?我的分太少了,想分都想得...
再及:cb也有自己的用处,虽然不如delphi,当然也不如bc。至少一点:有的人只懂c++,不会
pascal,但又觉得vc不好学,那就正好了。
 
我就是sonie说的那种人:(
 
to sonie:我试过了,不知你试过没有,还是同样的错误。

有的人只懂c++,不会
pascal,但又觉得vc不好学,那就正好了。
-------引自sonie
vc着实不好学,就拿界面来说,就吓我一溜跟头。
 
其实我知,我说的那句跟你后面出错的那话没有必然的联系。
你肯定是你说的那句出错,还是其前面的?
出错信息是...?
 
我总觉得while((*(p + i) = fgetc(bmpfp)) != EOF) i ++;这句还有出错的可能。
但后面的是应该没有的
要不把这句改成
int j=0;
while(((*(p + j) = fgetc(bmpfp)) != EOF)&amp;&amp;j<(bytes - 53)) j ++;
 
我是过了,还是不对
 
接受答案了.
 
后退
顶部