| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1634 人关注过本帖
标题:在TC下显示24位BMP文件时发现的郁闷问题?
只看楼主 加入收藏
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
结帖率:74.19%
收藏
 问题点数:0 回复次数:16 
在TC下显示24位BMP文件时发现的郁闷问题?

在TC下显示24位BMP文件时发现的郁闷问题:

int Draw_64k_View(char *Filename,int x0,int y0,int lucency )
{
int WIDTH, HEIGHT, fp;
long fix;

if((fp = open(Filename, O_RDONLY | O_BINARY)) == -1)
{
printf("Can't find File ""%s"".",Filename);
getch();
return 1;
}

WIDTH=GetWidth(fp);
HEIGHT=GetHeight(fp);

fix =(long)WIDTH %4;

lseek(fp, 54l+fix, SEEK_SET);

Draw_64k(fp,fix,x0,y0,WIDTH,HEIGHT - 1,lucency);

close(fp);
return 0;
}

为什么把lseek(fp, 54l+fix, SEEK_SET);改为
lseek(fp, 54l+fix-(WIDTH%4==2), SEEK_SET);才能正常显示图片啊

搜索更多相关主题的帖子: BMP文件 int Filename WIDTH 
2006-11-01 22:20
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
先把fix =(long)WIDTH %4;改成fix =(long)(WIDTH %4);
可能是你的偏移搞错了,参考一下WIN-TC里的“第三方BGI演示”。
2006-11-02 10:06
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

那么改还是不行

就是参见它的做的

2006-11-02 12:36
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用cdmalcl在2006-11-1 22:20:55的发言:

在TC下显示24位BMP文件时发现的郁闷问题:

int Draw_64k_View(char *Filename,int x0,int y0,int lucency )
{
int WIDTH, HEIGHT, fp;
long fix;

if((fp = open(Filename, O_RDONLY | O_BINARY)) == -1)
{
printf("Can't find File ""%s"".",Filename);
getch();
return 1;
}

WIDTH=GetWidth(fp);
HEIGHT=GetHeight(fp);

fix =(long)WIDTH %4;

lseek(fp, 54l+fix, SEEK_SET);

Draw_64k(fp,fix,x0,y0,WIDTH,HEIGHT - 1,lucency);

close(fp);
return 0;
}

为什么把lseek(fp, 54l+fix, SEEK_SET);改为
lseek(fp, 54l+fix-(WIDTH%4==2), SEEK_SET);才能正常显示图片啊

不对是
lseek(fp, 54l+fix+(WIDTH%4==2), SEEK_SET);

2006-11-02 20:51
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

#include <dos.h>
#include <stdio.h>
#include <fcntl.h>
#include <graphics.h>

typedef struct
{
unsigned char b;
unsigned char g;
unsigned char r;
}
rgb16M;

int GRPAH_MAXX;
int keep_page=0;

int huge Return_SVGA64K(void)
{
return(3);
}

void Init64k()
{
int gd=DETECT,gm=0;
installuserdriver("Svga64K", Return_SVGA64K);
initgraph(&gd, &gm, "");
GRPAH_MAXX=getmaxx()+1;
}

int putpoint(int x, int y, rgb16M color)
{
int page;

page = (int)((y*(long)GRPAH_MAXX +x) >> 15);
if(keep_page!=page)
{
_BX = 0;
_DX =page;
_AX = 0x4f05;
__int__(0x10);
keep_page=page;
}
setrgbpalette(1026, color.r >> 3, color.g >> 2, color.b >> 3);
putpixel(x, y, 0);
}

int Draw_64k(int fp ,long jump ,int draw_x ,int draw_y ,int width_x,int height_y ,int lucency)
{
int i,j;
rgb16M *buffer;

buffer = (rgb16M *)malloc(width_x*sizeof(rgb16M));
for(j = height_y-1; j >= 0; j--)
{
read(fp, buffer, width_x*sizeof(rgb16M));

for(i = 0; i < width_x; i++)
if(buffer[i].b+buffer[i].g+buffer[i].r+lucency) putpoint(draw_x + i, draw_y + j, buffer[i]);
lseek(fp, jump, SEEK_CUR);
}
free(buffer);
}

int Draw_64k_View(char *Filename,int x0,int y0,int lucency )
{
int WIDTH, HEIGHT, fp;
long fix;

if((fp = open(Filename, O_RDONLY | O_BINARY)) == -1)
{
printf("Can't find File ""%s"".",Filename);
getch();
return 1;
}

WIDTH=GetWidth(fp);
HEIGHT=GetHeight(fp);

fix =(long)(WIDTH % 4);

lseek(fp, 54l+fix+(WIDTH%4==2), SEEK_SET);

Draw_64k(fp,fix,x0,y0,WIDTH,HEIGHT,lucency);

close(fp);
return 0;
}

int GetWidth(int fp)
{
long WIDTH;

lseek(fp, 18l, SEEK_SET);
read(fp, &WIDTH, 4);

return WIDTH;
}

int GetHeight( int fp)
{
long HEIGHT;

lseek(fp, 22l, SEEK_SET);
read(fp, &HEIGHT, 4);

return HEIGHT;
}

main()
{
Init64k();
Draw_64k_View("sssssss.bmp",0,0,0);getch();
Draw_64k_View("胜利.bmp",0,0,0);getch();

}

这是我写的显示程序
是不是其他的地方出的错啊
还是文件格式就是我说的那样???

2006-11-02 20:54
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

我编译执行了程序,一闪而过,什么都看不到,立马关闭了。你先查查。

2006-11-03 10:41
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

不能吧!!
我那运行挺正常的啊!
我是复制粘贴过来的

你在你那是是哪个程序段出现的运行断点啊?
不会是图形模式初始化吧
2006-11-03 12:46
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
我也是复制粘贴下来的啊,编译连接不报错,只是执行窗口一闪而过,用小一张的图片,100X100左右的就不会马上关闭,但也看不到显示结果。我在上班,没时间多调了,你多发给几个人试试。
2006-11-03 15:56
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

发给很多人试过
都是一闪而过
而且都是在图形初始化的那一步
难道吴进的图形驱动有限制么?

2006-11-04 09:08
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
这就不太清楚了,这些第三方BGI可能兼容性是不如原来的EAG_VGA的好,我以前也用它做过一个叫lizard的图形扩展库,但由于性能不佳最后并没放出来让大家测试过,而是另写了NEO,所以不知道它的兼容性到底如何,我是GFORCE 5200的卡子,你问问那些出问题的机子是什么卡子。另外也可以查查程序是否有内存方面的BUG。
2006-11-04 10:47
快速回复:在TC下显示24位BMP文件时发现的郁闷问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015976 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved