读书人

怎么将.bmp格式的位图导入到tubor c编

发布时间: 2012-11-03 10:57:44 作者: rapoo

如何将.bmp格式的位图导入到tubor c编的c语言程序中
如何将.bmp格式的位图导入到tubor c编的c语言程序中???
希望看到的大神能够给出比较详细的解答,请不要问在下为啥还用这么落后的编辑器,这也是没办法的事情。能够推荐一些相关的资料也行,因为这类的资料现在真的是不好找。

[解决办法]
1)位图的头里是对位图的说明,可以参考windows使用的结构体,直接拷贝也行。
2)当做普通文件读入,得到头的信息,找到图像类容的偏移,存入数组。一般如果bitcount小于24的话图像类容存的是调色板的索引,24位的话就是直接的RGB数据。
3)建议LZ直接做一个相关的库。
[解决办法]

C/C++ code
//MAIN FILE#include<iostream.h>#include<graphics.h>#include<fstream.h>#include "bitmap.h"// This Global Function is used for the resolution of the bitmap. You can set the return value either 1,2 or 3. For me 3 is the best combination.huge DetectSvga(){    return 3;}void main(){    int gd = DETECT, md, a;        installuserdriver("SVGA256",&DetectSvga);    initgraph(&gd,&md,"c:\\tc\\bgi"); //Path may be different in your computer.       Show();    Show1();   }//Suppose you have one show function which read the bitmap from the disk. Then this show function looks like this.void Show(){    fstream File;       //Here you have to define the path of the bitmap file. Like according to this example i have to open one Board1.bmp file. So write you bitmap file path here.       File.open("d:\\Chess\\Bitmaps\\Board1.bmp",ios::in);       unsigned char Ch;       File.read((char*)&HEADER,14); //This is the header part of the Bitmap. It always looks like same. Don't change the content hear. The value remains 14 here.       File.read((char*)&INFOHEADER,40); //This is another part of the bitmap, here also the value remains same like 40 here.       unsigned int i;    char ColorBytes[4];    char*PaletteData;       PaletteData=new char[256*3];       if(PaletteData)//if memory allocated successfully    {        //read color data        for(i=0;i<256;i++)        {            //Don't change the code here because i have done some shifting here. Its working fine.            File.read(ColorBytes,4);            PaletteData[(int)(i*3+2)]=ColorBytes[0]>>2;            PaletteData[(int)(i*3+1)]=ColorBytes[1]>>2;            PaletteData[(int)(i*3+0)]=ColorBytes[2]>>2;        }               outp(0x03c8,0);      //tell DAC that data is coming               for(i=0;i<256*3;i++) //send data to SVGA DAC        {            outp(0x03c9,PaletteData[i]);        }        delete[]PaletteData;    }       for(i=0;i<INFOHEADER.height;i++)       //This for loop is used to display the bitmap.    {        for(int j=0;j<INFOHEADER.width;)        {            File.read(&Ch,1); // Here Ch reads the color of your bitmap.            putpixel(XCor+j++,YCor+INFOHEADER.height-i-1,Ch); //XCor and YCor are the X and Y cordinates. It depends upon you.                   }    }       File.close();   }//Another way to display the Bitmap is. Suppose i have another Show1() Function. This is simple as compare to previous show function.void Show1(){       Char Ch;    fstream File;    File.open("d:\\Chess\\Bitmaps\\KingA.bmp",ios::in);       File.seekg(54,ios::beg);   //Its remains same. Means value always remains 54    File.seekg(256*4,ios::cur); //Its remains same means value always remain 256*4.       for(int i=0;i<40;i++) //Here 40 shows the height of the bitmap. It may be differ it depends upon the size of your bitmap.    {        for(int j=0;j<36;j++) //Here 36 shows the width of the bitmap. It may be differ it depends upon the size of your bitmap.        {            File.read(&Ch,1); //Here Ch is the character which reads the color of your bitmap.                       putpixel(this->XCor+j,this->YCor+39-i ,Ch);                   }    }   }
[解决办法]
http://www.easyx.cn
------解决方案--------------------


freeimage

读书人网 >C语言

热点推荐