菜鸟问题:关于在TC下显示一幅BMP格式的图象~:(
想做一个图象变换来着,但是要先把做变换的图象给显示出来.经过变换之后再把结果也显示出来.对比之.
花了一天时间在CSDN上看以前别人发的帖子有了一些概念.但是有很多的困惑.希望各位大虾不吝赐教哦^_^
1.256色图一定是灰度图象吗?还是只要是有256种颜色就可以的了?
2.320*200分辨率的图象是不是就表示图象的大小就是320*200呢?(看到很多帖子都提供了源代码,可是down下来都读发现,图象文件读不进来,会不会是与这个有关啊)
3.一个很重要的问题,大家都说如果图象的width不是4的整数倍的话要补0.这样的话,图象的数据不就是变化了嘛.那么显示的时候怎么办呢?按补0之后的来显示吗?那样不是原来图象了嘛!
苦恼ing ,请大家帮忙
问题点数:0、回复次数:12Top
1 楼shine04(shine04)回复于 2005-04-03 19:22:00 得分 0
大家不要嫌我的问题太菜鸟么~:(Top
2 楼shine04(shine04)回复于 2005-04-03 20:01:45 得分 0
大家都来看一看嘛,为什么我的帖子一点人气都没有?Top
3 楼mensa(Talor)回复于 2005-04-03 20:28:47 得分 0
第一个问题:256色图好像不一定是灰度图像吧。
第二个问题:320×200的图像其大小不一定是320×200,因为大多数图像都是以压缩格式存储的,所以实际大小应该小于320×200;
第三个问题:我也不知道:)Top
4 楼shine04(shine04)回复于 2005-04-03 21:26:10 得分 0
仍旧很感激你:)Top
5 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-04-03 21:50:39 得分 0
3.每一行读完后fseek跳到下一个四个字节对齐的
Top
6 楼xhltoo(晨风)回复于 2005-04-04 10:40:03 得分 0
关注!!
Top
7 楼lito_rat(一只无聊的老鼠)回复于 2005-04-04 18:39:25 得分 0
同样关注Top
8 楼ThinkLover(青青子衿)回复于 2005-04-04 22:54:34 得分 0
1.256色图不一定是灰度图象。只是说每个pixel用8bit表示。
2.320*200分辨率的图象表示图象有320*200个象素点,至于其存储大小,还要看是否压缩。(bmp也可以采用行程压缩的哦)
3.图象的width不是4的整数倍的话要补0.其实在我门通常处理的图象里,宽度很少有不是4的整数倍的。这个确实比较麻烦。在我写的一个工具里,干脆没考虑这种情况,呵呵Top
9 楼piziliu2003(眼淚咖啡)回复于 2005-04-05 18:32:20 得分 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bios.h>
#include <conio.h>
#include <ctype.h>
#include <dos.h>
#include <fcntl.h>
#include <io.h>
#define lengthlimit 640
#define highlimit 480
int Set640_480 (void)
{
asm
{ mov ax,4f02h
mov bx,0101h
int 10h
}
if((_AL==0x4f)&&(_AH==0))
{
return(0);
}
return(1);
}
void Set_Page(int page)
{
asm
{ mov ax,4f05h
asm mov bx,0
asm mov dx,page
asm int 10h
}
}
void myputpixel (int row,int col,unsigned char color)
/*(row,col)??的坐?,color???色*/
{
unsigned long dantance;
unsigned y;
static int totalpage=0;
int page;
dantance=1l*col*lengthlimit+row;
y=(unsigned)(dantance&0X0000ffffl);
page=(int)(1.0*dantance/65536);
if (totalpage!=page) { totalpage=page; Set_Page(page); }
asm {
mov ax,0a000h
mov es,ax
mov si,y
mov al,color
mov es:[si],al
}
}
void bmpout(char *bmpstr)
/* 打?文件名?*bmpstr的BMP文件,?出?象*/
{
FILE *bmpfp;
struct bmp{
int bftype;
long bfsize;
long bfr;
long bfoff;
long bisize;
long biwidth ;
long biheight;
} bmpp;
struct DAC{
char blue;
char green;
char red;
};
struct DAC dacp[256];
char pp;
int colorcount,x,y,i,j,x0=0,y0=470,k,bibit,svg;
char resev,buf1 ;
void *buf;
Set640_480();
if((bmpfp=fopen(bmpstr,"rb"))==NULL)
{
printf("can't open file");
return;
}
fread(&bmpp,sizeof(bmpp),1,bmpfp);
fseek(bmpfp,28l,SEEK_SET);
fread(&bibit,2,1,bmpfp);
fseek(bmpfp,46l,SEEK_SET);
fread(&colorcount,sizeof(colorcount),1,bmpfp);
if (colorcount==0) { colorcount=256;}
fseek (bmpfp,54l,SEEK_SET);
for (i=0;i<colorcount;i++)
{
fread(&dacp[i],3,1,bmpfp);
fread(&resev,1,1,bmpfp);
}
for(i=0;i<colorcount;i++)
{
pp=dacp[i].red>>2;
dacp[i].red=dacp[i].blue>>2;
dacp[i].blue=pp;
dacp[i].green=(dacp[i].green>>2);
}
asm push es
_ES=FP_SEG(dacp);
_DX=FP_OFF (dacp);
asm mov bx,0
asm mov cx,colorcount
asm mov ah,10h
asm mov al,12h
asm int 10h
asm pop es
fseek(bmpfp,bmpp.bfoff,SEEK_SET);
buf=malloc(bmpp.biwidth);
for(i=0;i<bmpp.biheight;i++)
{
y=y0-i;
fread(buf,bmpp.biwidth,1,bmpfp);
for( j=x0;j<x0+bmpp.biwidth;j++)
myputpixel(j,y,*((unsigned char*)buf+j));
}
free(buf);
getch();
fclose(bmpfp);
delay(500);
return;
}
void main()
{
bmpout("*.bmp"); /* 打?某一BMP文件并?出?象*/
}
Top
10 楼shine04(shine04)回复于 2005-04-05 18:35:24 得分 0
可是,TC,VC中好象都不支持汇编呀,难道是哪个地方要设置一下.编译都不通过呀.Top
11 楼defyer007(深入浅出)回复于 2005-04-05 18:50:35 得分 0
TC中支持汇编的,好象要如下写:
/*在C环境中*/
asm
{
/*汇编代码插在这里*/
}Top
12 楼shine04(shine04)回复于 2005-04-09 22:58:22 得分 0
我知道啊,可是遇到asm,它就编译通不过啊.
Top
相关问题
- 怎样用VB把BMP图象转换成JPG格式的图象
- 请问对图象处理,其他格式的图象是不是需要转为BMP格式再处理?
- 怎么样在TC2.0里显示BMP格式的图象文件?
- VB中如何将BMP图象转换为JPEG或其它类型的图象文件格式?
- 谁有详细的BMP或JPG格式图象显示的说明
- 图象格式的问题!!!!!!!!!
- 我想要一个能显示bmp,jpg等图象格式的控件,哪位朋友能给我一个吗?
- 100分求将dicom格式图象转成bmp显示的代码,最好是c的
- 我想要一个能显示bmp,jpg等图象格式的控件,哪位朋友能给我一个吗?
- QQ:76563357在取得路径的情况下,如何在对话框中显示*.bmp格式的图象,但不能把图象做成资源




