游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1795|回复: 1

【求助】_lseek的问题

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-3-17 15:57:00 | 显示全部楼层 |阅读模式
谁能告诉为什么_lseek会出错,我用windows游戏编程大师技巧(第二版)总的加载BMP的代码,(是用VC2005编译)都会在_lseek自动跳出程序,停止运行。
代码如下:
int Load_Bitmap_File(BITMAP_FILE_PTR bitmap,char * filename)
{
        int file_handle,index;
        UCHAR *temp_buffer = NULL;
        OFSTRUCT file_data;
        if((file_handle = OpenFile(filename,&file_data,OF_READ))==-1)
        {
                return 0;
        }
       
        _lread(file_handle,&bitmap->bitmapfileheader,sizeof(BITMAPFILEHEADER));
        if(bitmap->bitmapfileheader.bfType != BITMAP_ID)
        {
                _lclose(file_handle);
                return 0;
        }
        _lread(file_handle,&bitmap->bitmapinfoheader,sizeof(BITMAPINFOHEADER));
        if(bitmap->bitmapinfoheader.biBitCount = 8)
        {
                _lread(file_handle,&bitmap->palette,MAX_COLORS_PALETTE*sizeof(PALETTEENTRY));

                for(index=0;index<MAX_COLORS_PALETTE;index++)
                {
                        int temp_color = bitmap->palette[index].peRed;
                        bitmap->palette[index].peRed = bitmap->palette[index].peBlue;
                        bitmap->palette[index].peBlue = temp_color;
                        bitmap->palette[index].peFlags = PC_NOCOLLAPSE;
                }
        }
        _lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);
        if(bitmap->bitmapinfoheader.biBitCount ==8||
                bitmap->bitmapinfoheader.biBitCount == 16||
                bitmap->bitmapinfoheader.biBitCount == 24)
        {
                if(bitmap->buffer)
                        free(bitmap->buffer);
                if(!(bitmap->buffer = (UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage)))
                {
                        _lclose(file_handle);
                        return 0;
                }

                _lread(file_handle,bitmap->buffer,bitmap->bitmapinfoheader.biSizeImage);
        }else
        {
                return 0;
        }

        _lclose(file_handle);
        Flip_Bitmap(bitmap->buffer,bitmap->bitmapinfoheader.biWidth*(bitmap->bitmapinfoheader.biBitCount/8),bitmap->bitmapinfoheader.biHeight);

        return 1;
}

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-2-27 17:41:00 | 显示全部楼层

Re:【求助】_lseek的问题

vc2005里用SetFilePointer代替吧。
SetFilePointer((HANDLE)file_handle, -(int)(bitmap->bitmapinfoheader.biSizeImage), NULL, FILE_END);
代替原代码应该就可以了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 06:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表