13,824
社区成员
发帖
与我相关
我的任务
分享
void SetGrayToBitmap(BYTE *pBuf, int w, int h, Graphics::TBitmap *dstbmp)
{
typedef struct
{
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY dummy[256];
} LOGPAL;
LOGPAL GrayPal;
GrayPal.palVersion=0x300;
GrayPal.palNumEntries=256;
for (int i=0;i<256;i++)
{
GrayPal.dummy[i].peRed=i;
GrayPal.dummy[i].peGreen=i;
GrayPal.dummy[i].peBlue=i;
GrayPal.dummy[i].peFlags=0;
}
Graphics::TBitmap *bmp = new Graphics::TBitmap;
bmp->Width = w;
bmp->Height = h;
bmp->PixelFormat=pf8bit;
bmp->Palette= CreatePalette((const tagLOGPALETTE *)&GrayPal);
for (int y = 0; y < h; y++)
{
memcpy(bmp->ScanLine[y], pBuf, w);
pBuf += w;
}
if (!dstbmp->Empty)
{
dstbmp->FreeImage();
}
dstbmp->Assign(bmp);
delete bmp;
}
//用法:
Graphics::TBitmap *bmp = new Graphics::TBitmap;
BYTE GrayBuf[32*32];
for (int i = 0; i < 32*32) GrayBuf[i] = i%256;//灰度图像数据
SetGrayToBitmap(GrayBuf, 32, 32, bmp);
bmp->SaveToFile("c:\\test.bmp");
delete bmp;
#include "EasyBMP.h"int array[3][3]={{0,1,0,},{1,0,1,},{0,1,0,},};//数组转图像void array2bmp(){ int i,j; BMP bmp; RGBApixel pix_black={0};//R=0 G=0 B=0为黑色 RGBApixel pix_white={255,255,255,0};//白色 bmp.SetSize(3,3); bmp.SetBitDepth(1); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(array[i][j]==1) { bmp.SetPixel( i, j,pix_black); } else { bmp.SetPixel( i, j,pix_white); } } } bmp.WriteToFile("examp_array2bmp.bmp"); printf("array2bmp suc...\n");}//图像转数组void bmp2array(){ int i,j; BMP bmp; int *pdata=NULL; int *phead=NULL; int *buf=NULL; int width; int height; bmp.ReadFromFile("examp_bmp2array.bmp"); width = bmp.TellWidth(); height= bmp.TellHeight(); pdata=(int*)malloc(width*height*sizeof(int)); phead = pdata; for(i=0;i<height;i++) { for(j=0;j<width;j++) {//打印模拟图,空白为'.',黑色为'M' *pdata=bmp(j,i)->Red;//位深1,读Red分量即可 pdata++; } } //save pdata=phead; for(i=0;i<height;i++) { for(j=0;j<width;j++) {//打印至终端 printf("%d,",*pdata); pdata++; } printf("\n"); } printf("bmp2array suc...\n"); getchar();}int main(){ array2bmp(); bmp2array(); return 1;}