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

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

你在你那是是哪个程序段出现的运行断点啊?
不会是图形模式初始化吧
2006-11-03 12:46
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

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

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

这个我自然知道啊
别人帮我调试的时候我都再三告诉他要放在一个文件夹里
但是还是有人说不能驱动起来 可能和显示器有关吧
驱动程序如果没问题的话那我想知道的是我的图片显示的对不对啊
24位BMP图片文件可是到底是什么?

2006-11-05 14:05
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
可能吧
他们几个显示不出来的我都没问什么显卡

我的程序的确有问题
用 第三方BGI演示 里的程序试那两个图片的确没问题
我再去看看
2006-11-05 15:36
快速回复:在TC下显示24位BMP文件时发现的郁闷问题?
数据加载中...
 
   



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

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