游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2563|回复: 4

读取png纹理图片的代码

[复制链接]

16

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2007-6-20 15:43:00 | 显示全部楼层 |阅读模式
大家有没有读取png纹理图片的代码呢,我自己先把png图片转换成了bmp图片格式,但图片好像完全变样了

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-6-21 08:50:00 | 显示全部楼层

Re:读取png纹理图片的代码

用CImage类处理

16

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2007-6-21 09:45:00 | 显示全部楼层

Re:读取png纹理图片的代码

楼主能说详细点吗,我没用过这个类,谢谢

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-6-21 10:53:00 | 显示全部楼层

Re:读取png纹理图片的代码

  CImage img;
  if(img.Load(lpszTexture) != S_OK)
    return false;
  
  int nBPP = img.GetBPP();
  if(!((nBPP == 24)||(nBPP == 32))) //只支持24,32位
    return false;

  int nWidth = img.GetWidth();
  int nHeight = img.GetHeight();

  BYTE *pTexture = new BYTE[nWidth * nHeight * 3];

  int nPitch = img.GetPitch();
  LPBYTE lpData, lpLine, lpCurPixel;
  lpData = lpLine = (LPBYTE)img.GetBits();
  int nBytesPP = nBPP >> 3;

  for(int i = 0; i < nHeight; i++)
  {
    lpLine = lpData + i * nPitch;
    for(int j = 0; j < nWidth; j++)
    {
      lpCurPixel = lpLine + j * nBytesPP;
      pTexture[(i * nWidth + j)*3] = *(lpCurPixel + 2);     //R
      pTexture[(i * nWidth + j)*3 + 1] = *(lpCurPixel + 1); //G
      pTexture[(i * nWidth + j)*3 + 2] = *lpCurPixel;       //B
    }
  }
上面这段代码可以读取24位,32位的图象(jpg,bmp,png,tiff等图象格式)。注意使用CImage类时要
#include "atlimage.h"
此外,楼主不是我:)

0

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2007-7-18 09:22:00 | 显示全部楼层

Re:读取png纹理图片的代码

可以用一些库,比如FreeImage,DevIL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 19:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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