目录
软件设备
Visual Studio2022
实验内容
1.向内存加载两个或多个 BMP位图文件
2.利用像素操作实现单色(R、G、B)、灰度图像的显示
3.通过操作像素实现图像的倒立和正立显示
4.实现两个图像的叠加(一张风景照 一张自己的人物照)
5.改变教材给出的波纹模拟程序中石头大小(stonesize)、石头重量(stoneweight)和显示帧频率等参数,观察模拟效果,并分析所看到现象的原因。
内容1:加载多个位图文件
-
首先,创建一个WIN32项目,如何创建项目?请参考这篇文章:全新超详细!2024 CSU 多媒体技术与应用实验一(详细版)-CSDN博客
-
接下来,我们按照教材中的步骤进行操作,首先添加全局变量,位置注释里有写,创建的代码模板中是会有的:
-
添加图片显示的代码,这段代码是添加在wWinMain函数中的,你也可以自己写一个函数封装这个代码,然后在wWinMain中去调用,并做好前置声明。代码的内容如下,这里是两张图片的添加:
也可以封装这两个代码,再放到wWinMain函数中:
//加载第一张图片
void loadImage1(HINSTANCE hInstance) {
if (LoadImage(hInstance, L"image_1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) == NULL)
{
MessageBox(NULL, L"加载图像错误", L"message", NULL);
}
else
{
hbmp = (HBITMAP)LoadImage(hInstance, L"image_1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
GetObject(hbmp, sizeof(BITMAP), &bmp);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bmp.bmWidth;
bi.biHeight = bmp.bmHeight;
bi.biPlanes = bmp.bmPlanes;
bi.biBitCount = bmp.bmBitsPixel;
bi.biCompression = bmp.bmType;
bi.biSizeImage = bmp.bmWidth * bmp.bmHeight * bmp.bmBitsPixel / 8;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrImportant = 0;
hDib = GlobalAlloc(GHND, bi.biSizeImage);
lpbitmap = (BYTE*)GlobalLock(hDib);
}
void loadImage2(HINSTANCE hInstance) {
if (LoadImage(hInstance, L"image_3.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) == NULL)
{
MessageBox(NULL, L"加载图像错误", L"message", NULL);
}
else
{
hbmp2 = (HBITMAP)LoadImage(hInstance, L"image_3.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
}
GetObject(hbmp2, sizeof(BITMAP), &bmp2);
bi2.biSize = sizeof(BITMAPINFOHEADER);
bi2.biWidth = bmp2.bmWidth;
bi2.biHeight = bmp2.bmHeight;
bi2.biPlanes = bmp2.bmPlanes;
bi2.biBitCount = bmp2.bmBitsPixel;
bi2.biCompression = bmp2.bmType;
bi2.biSizeImage = bmp2.bmWidth * bmp2.bmHeight * bmp2.bmBitsPixel / 8;
bi2.biXPelsPerMeter = 0;
bi2.biYPelsPerMeter = 0;
bi2.biClrImportant = 0;
hDib2 = GlobalAlloc(GHND, bi2.biSizeImage);
l