游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3644|回复: 10

在2D游戏中如何加载TGA图片

[复制链接]

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-6-3 17:24:00 | 显示全部楼层 |阅读模式
在2D游戏中如何加载TGA图片,请教!!!!!

0

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2006-6-4 14:03:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

先LoadHead,再LoadFileImage.
int loadTGAhead(char *file)                                /*读TGA文件头*/
{
  struct TGA_HEAD tgahead;
  int  i,j,flag=0;
  FILE *fp;
  BYTE *p;

  fp=fopen(file,"rb");                                 /*打开图像文件*/
  if (fp != NULL) {
    flag=1;
    fseek(fp,0L,SEEK_SET);
    fread(&tgahead,18,1,fp);                              /*读入图像文件头*/
                                                                      /*以下取出图像参数*/
    p=(BYTE*) &tgahead;
    Width        = p[12]+256*p[13];      // tgahead.Width;
    Height       = p[14]+256*p[15];      // tgahead.Height;
    BitCount     = p[16];                // tgahead.Bits;
    BytesPerLine = Width * BitCount / 8;
    Compression  = p[2] & 0x8;           // tgahead.ImageType;
    ImageType    = p[2] & 0x3;
    Planes=1;
    ColorNum     = p[5]+256*p[6];
    OffBits=18;
    if (ImageType!=2) OffBits += 3*ColorNum;

    p=(BYTE *) T_pal;
    if (ImageType==1) {                                    /*文件中有调色板*/
      fread(p,1,768,fp);                            /*读入调色板数据*/
      for (i=0;i<768;i+=3) {                              /*红蓝分量交换*/
            j=p;      p=p[i+2];
            p[i+2]=j;
      }
        }
        else if (ImageType==3) {                    /*黑白图像补上调色板*/
      for (i=0;i<256;i++) {
             for (j=0;j<3;j++)  p[3*i+j]=i;
      }
      ColorNum = 256;
    }
    fclose(fp);                                          /*关闭图像文件*/
  }
  return(flag);
}
;
void loadTGAimage(char *file,int px,int py,int Dx,int Dy,int sx,int sy)
{                                               /*读入并显示彩色图像*/
  int  i,dw,dh;
  FILE *fp;
  BYTE *sc;

  i=loadTGAhead(file);                                 /*读TGA文件头*/
  if (i==0)  return;

  dw=min(Width -px,Dx);     dw=min(dw,swide-sx);      /*确定视口尺寸*/
  dh=min(Height-py,Dy);     dh=min(dh,sdeep-sy);

  if (T_bitpp<=8)
     set_allpalette(T_pal);       /*设置VGA调色板寄存器*/
  else {
     px *= T_bpp;
     if (BitCount<=8)
        set_Vpalette((BYTE *)T_pal,(union COLOR_V *)bgr);   
  }
  sc=malloc(4*Width);                                 /*申请存储单元*/

  fp=fopen(file,"rb");                                /*打开图像文件*/
  fseek(fp,OffBits,SEEK_SET);                            /*设置取数指针*/
  for (i=Height-1;i>=0;i--) {
    fread(sc,BytesPerLine,1,fp);                        /*读一行图像数据*/
    if (T_bitpp==32)  Trans_24to32(sc,3*Width);      /*32Bit显示模式*/

    if ((BitCount<=8)&&(T_bitpp>=24))
       trans_8toColor(sc,Width);

    if ((i>=py)&&(i<py+dh))
      put_image(sx,i+sy-py,dw,1,&sc[px]);                      /*显示一行*/
  }
  fclose(fp);                                         /*关闭图像文件*/
  free(sc);                                           /*释放存储单元*/
}
主要的就是这2个函数了,参数命名都应该能看明白吧
put_image采用bitblt函数

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-6-4 14:13:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

多谢了。

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-6-5 12:06:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

谢谢了!

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-6-5 12:13:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

如果用给一个例程,就好了!!!!!

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-6-5 17:57:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

如果解决TGA在显示速度慢的?

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-6-5 18:53:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

TGA会显示慢吗?解码后所有文件格式都是一样的吧。

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-6-6 10:16:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

在进行Alpha混合后,把图片打向屏幕时.速度很慢.
我的QQ:80556999 .谢谢了!

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-6-6 23:42:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

那是alpha混合本身慢吧,是否使用mmx?

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-6-7 10:00:00 | 显示全部楼层

Re:在2D游戏中如何加载TGA图片

是的,alpha混合很慢.但不会使用mmx进行加速.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 16:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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