在C++中是这样显示一张位图的

显示一幅位图很简单,代码如下:

void CTuopan1View::OnShowbmp()
{
// TODO: Add your command handler code here

CFileDialog bmpfile(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP位图文件(*.bmp)|*.bmp||",NULL);
if(IDOK==bmpfile.DoModal()){
CString FileName=bmpfile.GetPathName();
HBITMAP mybmp;
mybmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,NULL,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

HBITMAP oldbmp;
CDC memdc;
CDC *dc=GetDC();
CRect rect;
memdc.CreateCompatibleDC(dc);
GetClientRect(rect);
oldbmp = (HBITMAP)memdc.SelectObject(mybmp);
//显示图片
dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbmp);
ReleaseDC(dc);

}
}

 

 

另一种显示位图的方法:

1、定义一个位图指针变量为窗口(Wnd)类的成员变量:

CBitmap *bitmap;

CDC* mydc;

2、在窗口(Wnd)类的构造函数中,为位图变量申请空间,并从硬盘上加载此图片:

bitmap = new CBitmap;

bitmap->m_hObject = LoadImage(NULL,"my.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE)

%%参数:第一个:图片句柄,当直接从硬盘上加载的时候设为NULL,

%%第二个:文件路径,如果是当前路径,直接写文件名

%%第三个:文件类型

%%第四、五个:图片的宽和高

%%第六个:位图加载方式,LR_LOADFROMFILE表示按文件名的方式加载

3、将加载的图片和当前的窗口联系起来,

mdc = new CDC;%%在内存中申请一块区域,前提是定义了一个Wnd类的成员变量CDC *mdc;

CClientDC dc(this);%%定义一个客户作图区的变量,this指针就是当前窗口

mdc->CreatCompatibleDC(&dc);%%将申请的内存和客户作图区联系起来

mdc->SlectObject(bitmap);%%将图片放入申请的内存。

4、显示图片:

dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);

%%显示图片并将这句话放在OnDraw函数中。每次重绘都会调用

 

注意:

(1)申请堆内存new,可以在构造函数中执行

(2)mdc->CreatCompatibleDC(&dc);这句话是创建一个与指定设备兼容的内存设备上下文环境,对于全局变量mdc来说,它只能创建一次。所以这句话不能放在OnPaint函数中,因为这个函数会被多次执行。也不能放在构造函数中,如果放在上面两个函数中会导致程序崩溃。(具体原因尚且不清楚)。所以只有把这句话放在OnCreate函数中,这个函数只有在窗口创建的时候会被调用一次。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
位图是一种用于表示图像的数据结构,其中每个像素用二进制位表示。在C++中,位图通常被表示为一个二维数组,其中每个元素都是一个二进制位。位图通常用于图像处理和计算机图形学中。 位图可以使用各种方法进行操作,包括读取、写入和修改像素值。以下是一些常见的位图操作: 1. 读取位图:使用文件输入流读取位图文件,并将其解析为二维数组。 2. 写入位图:使用文件输出流将位图数据写入文件中。 3. 修改像素值:可以通过修改位图数组中的特定元素来更改像素值。 4. 显示位图:将位图数据转换为图像并将其显示在屏幕上。 5. 图像处理:可以对位图进行各种处理,如图像缩放、旋转、裁剪等。 下面是一个简单的示例代码,展示如何使用C++读取位图文件并显示其内容: ```c++ #include <iostream> #include <fstream> #include <string> using namespace std; int main() { // 打开文件 ifstream file("image.bmp", ios::binary); // 读取文件头 char header[54]; file.read(header, 54); // 读取图像数据 int width = *(int*)&header[18]; int height = *(int*)&header[22]; int padding = 0; while ((width * 3 + padding) % 4 != 0) { padding++; } int size = width * height * 3 + height * padding; char* data = new char[size]; file.read(data, size); // 显示图像 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int index = (y * width + x) * 3; char r = data[index + 2]; char g = data[index + 1]; char b = data[index]; cout << "(" << (int)r << ", " << (int)g << ", " << (int)b << ") "; } cout << endl; } // 关闭文件 file.close(); return 0; } ``` 该示例代码使用了C++的文件读写功能和动态内存分配来读取位图文件并显示其内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值