跳至正文

amp bmp(amp bmp smp)

用vc 读取BMP图片并显示出来代码怎么写啊?

用vc 读取BMP图片并显示出来代码怎么写啊?

显示位图文件

HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(“xxx.bmp”),Image_Bitmap,0,0,

Lr_CreateDibSection|Lr_DefaultSize|Lr_LoadFromFile); //加载bmp文件

CBitmap bitmap;

bitmap.Attach(hBitmap); //关联位图对象

CDC dcimage;

dcimage.CreateCompatibleDC(pDC); //内存DC

BITMAP bmp;

bitmap.GetBitmap(&bmp); //获取位图信息

dcimage.SelectObject(&bitmap); //选取位图对象

pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcimage,0,0,SRCCOPY); //显示

这是单文档显示位图文件的方法,你照着看吧。

我有一个二维数组,我要新建一个BMP文件,将这个数组数据作为BMP位图的数据,怎么弄?有程序吗?

我有一个二维数组,我要新建一个BMP文件,将这个数组数据作为BMP位图的数据,怎么弄?有程序吗?

你需要了解BMP位图的文件格式:具体参阅百度百科: bmp 这个词条和MSDN。

我写了一个简单的创建24位BMP位图的小程序。 简单演示了bmp位图的格式。

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#define BMP_W 640L

#define BMP_H 480L

void SetBmpInfoHeader(PBITMAPINFOHEADER pbmpih)

{

/* 14~17: 本结构体所占字节数, 固定值40 */

pbmpih->biSize = 40;

/* 18~21: 位图的宽度(以像素pixel为单位) */

pbmpih->biWidth = BMP_W;

/* 22~25: 位图的高度 */

pbmpih->biHeight = BMP_H;

/* 26~27: 目标设备的级别, 固定值:1 */

pbmpih->biPlanes = 1;

/* 28~29: 一个像素所占bit数, 可以是:1(双色)、4(16色)、8(256色)

、16(65536色)、24(真彩色2^24种颜色)、32(真彩色2^32种颜色),具体参阅MSDN。

对于24位真彩色位图, 一个像素占用三个字节,即24 bits */

pbmpih->biBitCount = 24;

/* 30~33:指定是否压缩, (如果压缩了)采用的压缩格式。

可以为: BI_RGB、BI_RLE4、BI_RLE8、BI_BITFIELDS、BI_PNG、BI_JPEG

有的位图会进行游程长度编码:BI_RLE4、BI_RLE8

压缩可以节省空间, 但不便于编程读写。BI_RGB表示不进行压缩处理 */

pbmpih->biCompression = BI_RGB;

/* 34~37: 位图数据区所占字节数,有固定的计算公式 */

pbmpih->biSizeImage = ((((pbmpih->biWidth * pbmpih->biBitCount) + 31) & ~31) / 8) * pbmpih->biHeight;

/* 38~41: 位图水平分辨率,每米像素数 */

pbmpih->biXPelsPerMeter = 0L;

/* 42~45: 位图垂直分辨率,每米像素数 */

pbmpih->biYPelsPerMeter = 0L;

/* 46~49: 位图实际使用颜色表中颜色数(对于有调色板的位图来说实际上是调色板中颜色项数,

24位真彩色位图不需要调色板, 设为0, 8位灰度位图为256(2^8种颜色)。 */

pbmpih->biClrUsed = 0L;

/* 50~53: 显示位图所需颜色数 */

pbmpih->biClrImportant = 0L;

}

void SetBmpFileHeader(PBITMAPFILEHEADER pbmpfh, const PBITMAPINFOHEADER pbmpih)

{

/* 0~1: 固定值: “BM”(或0x4D42),即表明这是位图(一般以bmp为文件名后缀)*/

pbmpfh->bfType = *(WORD *)”BM”;

/* 2~5: 位图文件总大小(占用总字节数, 包括文件头、信息头、调色板、位图数据区占用字节数)*/

pbmpfh->bfSize = pbmpih->biSizeImage + 54 + pbmpih->biClrUsed * sizeof(RGBQUAD);

/* 6~7: 固定值0: 目前没什么用, 可能留作将来扩展。也有的结构体中有这样的域是为了内存对齐 */

pbmpfh->bfReserved1 = 0;

/* 8~9: 固定值 */

pbmpfh->bfReserved2 = 0;

/* 10~13: 位图数据区起始位置, 计算方法为:

位图文件头14个字节+位图信息头40个字节+位图调色板所占字节数,

这里要创建的是一张24位位图(无调色板),故设置为54 也可以。*/

pbmpfh->bfOffBits = 54 + pbmpih->biClrUsed * sizeof(RGBQUAD);

}

int main(void)

{

BITMAPFILEHEADER bmpfh = { 0 }; /* 位图文件头 */

BITMAPINFOHEADER bmpih = { 0 }; /* 位图信息头 */

FILE *fpBmp = NULL;

COLORREF color = RGB(0xf0,0xca,0xa6); /* 天蓝色 */

COLORREF black = 0;

int fillbits;

int w, h;

SetBmpInfoHeader(&bmpih);

SetBmpFileHeader(&bmpfh, &bmpih);

fillbits = ( 4 – ( bmpih.biWidth * 3 ) % 4 ) % 4;

fpBmp = fopen(“D:\\rendering.bmp”, “wb”);

if (NULL == fpBmp) {

perror(“fopen failed:”);

system(“pause>nul”);

exit(EXIT_FAILURE);

}

fwrite(&bmpfh, sizeof(BITMAPFILEHEADER), 1, fpBmp); /* 写入位图文件头 */

fwrite(&bmpih, sizeof(BITMAPINFOHEADER), 1, fpBmp); /* 写入位图信息头 */

/* 写入调色板(如果有的话) */

/* 写入位图数据 */

for (h = 0; h < BMP_H; ++h) {

for (w = 0; w < BMP_W; ++w) {

fwrite(&color, 3, 1, fpBmp); /* 将像素值颜色写入位图文件 */

}

/* 边界填充

对于24位位图每个像素占3个字节,且每个扫描行所占字节数必须是4的倍数。

比如,对于一张宽度为21个像素的24色位图, 理论上每扫描行占用21*3=63个字节,

但63不是4的倍数,所以需要在该扫描行的最后填充一个字节的0,凑到64,

这样实际上每扫描行占用64个字节。

fillbits = ( 4 – ( biheader.biWidth * 3 ) % 4 ) % 4; 参考自acepig, 作用是

计算每扫描行需要填充几个字节的0。对于宽度是4的倍数的图片, count为0。

*/

fwrite(&black, 1, fillbits, fpBmp);

}

fclose(fpBmp);

system(“mspaint D:\\rendering.bmp”);

return 0;

}

用VC怎样显示位图?

用VC怎样显示位图?

CClientDC dc(this);//取得客户区内存DC

CDC THDC;

HBITMAP THBM;

THDC.CreateCompatibleDC(0);//创建相关场景

THBM=(HBITMAP)LoadImage(NULL,”D:\\x.bmp”,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//载入位图

BITMAP bmp;

GetObject(THBM,sizeof(bmp),&bmp);//取得位图信息

SelectObject(THDC,THBM);//选入位图至内存DC

DeleteObject(THBM);//删除位图

BitBlt(dc,0,0,bmp.bmWidth,bmp.bmHeight,THDC,0,0,SRCCOPY);//将临时内存DC中的位图画到客户区中

//首先在D盘根目录下放一个标准.bmp格式的位图 再将这些代码写入一个按钮事件中 点击按键 就会在窗体的左上角看到图形了.

VC++优化截屏如何实现

两种方法。

第二种:参考一位网友的。

MFC中就有截取屏幕的相关函数:

ScrDC.CreateDC(“DISPLAY”, NULL, NULL, NULL);

具体函数如下:

//存储背景图片(成员变量)

CBitmap* m_pBackBitmap;

/*******************************

* 拷贝屏幕固定区域

* 参数:

* xStartPt – 拷贝屏幕的起始点X坐标

* yStartPt – 拷贝屏幕的起始点Y坐标

* width – 拷贝宽度

* height – 拷贝高度

* xToCopy – 拷贝目的地的起始点X坐标

* yToCopy – 拷贝目的地的起始点Y坐标

*******************************/

void CMyFun::CopyScreenToBitmap(xStartPt, yStartPt, width, height, xToCopy, yToCopy)

{

//NEW资源(调用一次重新拷贝一次)

if (m_pBackBitmap != NULL)

{

delete m_pBackBitmap;

m_pBackBitmap = NULL;

}

m_pBackBitmap = new CBitmap();

CDC ScrDC,MemDC;

ScrDC.CreateDC(“DISPLAY”, NULL, NULL, NULL);

MemDC.CreateCompatibleDC(&ScrDC);

m_pBackBitmap->CreateCompatibleBitmap(&ScrDC,width,height);

MemDC.SelectObject(m_pBackBitmap);

//开始拷贝

MemDC.BitBlt(xStartPt, yStartPt, width, height,&ScrDC,xToCopy,yToCopy,SRCCOPY);

ScrDC.DeleteDC();

MemDC.DeleteDC();

}

调用函数,实现截取全屏:

//取的屏幕分辨率

int width = ::GetSystemMetrics(SM_CXSCREEN);

int height = ::GetSystemMetrics(SM_CYSCREEN);

this->CopyScreenToBitmap(0,0,width,height,0,0);

//这时m_pBackBitmap指向的CBitmap对象就存着全屏的图象了

第一种:先截取屏幕保存为BMP格式文件,然后在VC资源中导入该位图。

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1为导入位图的ID。

CDC dc;

dc.CreateCompatibleDC(pDC); //创建兼容DC

dc.SelectObject(&bitmap); //选进设备表

BITMAP bmp;

bitmap.GetBitmap(&bmp);

CRect rect;

GetClientRect(&rect);

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY); //注意参数SRCCOPY

VB图片的保存的问题

Option Explicit Private i As Long ‘窗体Form1 按钮Command1 Image1 Private Sub Command1_Click() SavePicture Image1.Picture, "C:\kkkk\" & CStr(i) & ".bmp" i = i + 1 End Sub Private Sub Form_Load() i = 1 Image1.Picture = LoadPicture("C:\kkkk\样品.jpg") End Sub

怎么在MFC编辑框中显示图片 求详解

首先你须要控件子类化,就是将控件对应的类派生出一个子类,然后用这个子类创建控件,在子类中添加WM_ERASEBKGND消息,对应的::OnEraseBkgnd函数中用兼容DC贴上准备好的图片,如下

BOOL XXXXXX::OnEraseBkgnd(CDC* pDC)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CRect rect;

GetClientRect(rect);//得到当前区域大小

CBitmap bitmap;

bitmap.LoadBitmapW(IDB_BITMAP1);//创建位图对象并附加位图

BITMAP bmp;

bitmap.GetBitmap(&bmp);//为了得到附加的位置的长宽

CDC CompatbleDC;

CompatbleDC.CreateCompatibleDC(pDC);//创建兼容DC

CompatbleDC.SelectObject(bitmap);//位图选入DC

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&CompatbleDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);//将兼容dc贴到当前dc中并返回真,通知系统背景已经擦除成功

return TRUE

vc中判断图像是否对称

比如得到了图像句柄。hBitmap;(用CImage);

然后使用 :

BITMAP bmpinfo;

memset( &bmpinfo, 0, sizeof(bmpinfo) );

GetObject( hBitmap, sizeof(bmpinfo), &bmpinfo);

// 可以看看BITMAP结构成员描述信息。

// 判断对称

DWORD dwMask = 0x00FFFFFF; // 掩码要根据bmpinfo.bmBitsPixel 做个判断。自己做吧。

BYTE* pBuffer= ( BYTE*)bmpinfo.bmBits;

int nStepBytes= bmpinfo.bmBitsPixel/ 8;

int nWidCenter= bmpinfo.bmWidth/ 2;

for( int j = 0 ; j < bmpinfo.bmHeight; j++)

{

for( int i = 0 ; i < nWidCenter; i ++ )

{

DWORD dwLeft= *( ( DWORD*)( pBuffer+ i* nStepBytes);

DWORD dwRight= *( ( DWORD*)( pBuffer+ (bmpinfo.bmWidth-i)* nStepBytes);

// 修剪颜色值

dwLeft= dwLeft& dwMask;

dwRight= dwRight& dwMask;

if ( dwLeft!= dwRight)

return false; // 不对称,返回

}

pBuffer+= bmpinfo.bmWidthBytes;

}

return true;

以下几何题如何解答?

过B作BM⊥BP,且使BM=BP=2,连MP

∵MBA+ABP=ABP+PBC=90°

∴MBA=PBC

∵BM=PB,AB=BC

∴△MBA≌△PBC

∴BMA=BPC,AM=PC=4

BM=BP=2,MP=2√2,BMP=45°

由余弦定理 cosAMP=(PM^2+AM^2-AP^2)/2PM*AM=-3/4√2

∴sinAMP=√23/4√2

∴cosAMB=cos(AMP+45°)=√2cosAMP/2-√2sinAMP/2=(-3-√23)/8

∴cosCPB=cosAMB=(-3-√23)/8

CPB=arccos((-3-√23)/8)=π-arccos((3+√23)/8)

在MFC中如何获得一个CBitmap的宽和高?

直接用: BITMAP bmp; bmpIamge.GetBitmap(&bmp); int nWidth = bmp.bmWidth; int nHeight = bmp.bmHeight;

VB制作一个 一个按钮可以控制几张图片变换的编程

static i as integer picture1.picture=loadpicture("d:\" & i & ".bmp") i=i+1 也可加个判断这样就可以循环看图了 ‘if i=10 then i=0 ‘ 10为图的数量 ‘把d盘中的图片文件名改为从0~9假如有10张图) 0.bmp(或jpg) 1.bmp … 9.bmp