资源简介
用MFC将相同大小的2张图片拼接成一张图片,可以是BMP,可以是JPG,程序打开文件后自己更改路径即可运行
代码片段和文件信息
#include “stdafx.h“
#include “Image.h“
Image::Image()
{
lineP = new BYTE *[2];
for (int i=0; i<2; i++)
{
next[i] = -1;
}
}
Image::~Image()
{
}
HRESULT Image::CreateInstance(Image **ppimg)
{
if (ppimg == NULL)
{
return E_POINTER;
}
Image *pimg = new (std::nothrow) Image();
if (pimg == NULL)
{
return E_OUTOFMEMORY;
}
// 构造函数将ref count设置为1
*ppimg = pimg;
return S_OK;
}
void Image::load(LPCTSTR file)
{
src = CImage();
src.Load(file);//加载图片
pData = (BYTE *)src.GetBits();//获取每个点
//获取部分参数
width = src.GetWidth();
height = src.GetHeight();
bpp = src.GetBPP();
pitch = src.GetPitch();
//加载边界
loadLine();
}
void Image::loadLine()
{
lineP[0] = new BYTE[height];//左边0
lineP[1] = new BYTE[height];//右边1
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int p = -1 ;
if (x == 0)
{
p = 0;//左边
}
else if (x == width - 1)
{
p = 1;//右边
}
//参数0 左右边
if (p != -1)
{
BYTE b = *(pData + pitch * y + x * bpp / 8 + 0);
BYTE g = *(pData + pitch * y + x * bpp / 8 + 1);
BYTE r = *(pData + pitch * y + x * bpp / 8 + 2);
lineP[p][0] = b * 0.114 + g * 0.587 + r * 0.299;
}
}
}
}
void Image::join(LPCTSTR srcFilePath[] LPCTSTR destFilePath)
{
Image *srcImage = new Image[2];
CImage destImage;
for (int i = 0; i < 2; i++)
{
srcImage[i].load(srcFilePath[i]);
srcImage[i].linePower = new double *[2];//其他cnt张图片的边界权值
}
int height = srcImage[0].height;
int width = srcImage[0].width;
int bpp = srcImage[0].bpp;
int length[2] = {heightheight};//用于记录2条边的长度
destImage.Create(width * 2 height bpp);//创建新的图片
//计算每张图片2条边与别的图片的平方差
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
srcImage[i].linePower[j] = new double[2];//2条边的权值
if (i == j)
{
for (int line = 0; line < 2; line++)
{
//-1为跳过标识
srcImage[i].next[line] = -1;
}
continue;//当前图片跳过本次循环
}
for (int line = 0; line < 2; line++)
{
int otherLine = (line + 1) % 2;//0->1 1->0
int count = 0;//平方差之和
for (int point = 0; point < length[line]; point++)
{
count += pow((double)(srcImage[i].lineP[line][point] - srcImage[j].lineP[otherLine][point]) 2);
}
srcImage[i].linePower[j][line] = count / length[line];//平均平方差
}
}
for (int line = 0; line < 2; line++)
{
int min = -1;//标记
for (int j = 0; j < 2; j++)
{
if (i == j) continue;//本张图片跳过
if (min==-1 || srcImage[i].linePower[min][line] > srcImage[i].linePow
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 250368 2018-09-21 13:23 两张图片拼接\Debug\tupianpinjie.exe
文件 1710576 2018-09-21 13:23 两张图片拼接\Debug\tupianpinjie.ilk
文件 5843968 2018-09-21 13:23 两张图片拼接\Debug\tupianpinjie.pdb
文件 3824 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\cl.command.1.tlog
文件 91902 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\CL.read.1.tlog
文件 2816 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\CL.write.1.tlog
文件 306618 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\Image.obj
文件 5913 2018-09-21 10:37 两张图片拼接\tupianpinjie\Debug\ImageToAVI.obj
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 2082 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 6018 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 1336 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\li
文件 772 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\mt.command.1.tlog
文件 688 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\mt.read.1.tlog
文件 506 2018-09-21 13:23 两张图片拼接\tupianpinjie\Debug\mt.write.1.tlog
文件 1220 2018-09-21 10:37 两张图片拼接\tupianpinjie\Debug\rc.command.1.tlog
文件 3522 2018-09-21 10:37 两张图片拼接\tupianpinjie\Debug\rc.read.1.tlog
............此处省略55个文件信息
相关资源
- VS2013写的简单小游戏俄罗斯方块
- SerialAPP 开始研究MFC
- MFC学生选课系统263525
- VS2010+MFC 使用WinAPI实现串口通信
- opencv 车牌识别 vs2010 mfc
- 用MFC编写的对mysql数据库的操作
- 利用MFC的Picture控件显示图像和视频
- MFC五子棋源码以及exe文件
- 通过MFC的MCI实现的音乐播放器VC可视化
- mfc socket编程实现聊天与文件传输vs2
- MFC socket编程 简易聊天工具及文件
- MFC图像处理
- MFC十大经典游戏代码
- VS2010 C++ MFC 登陆界面设计
- 数字图像处理mfc
- mfc实现滑动窗口的简单模拟
- OBJ 模型文件读取显示 基于OpenGL MFC界
- 基于vs 2010 mfc实现对excel数据的读取,
- MFC动态加载和静态加载bmp类型图片
- 扫雷小游戏 完整源码
- 指针式仪表识别(MFC)
- 高斯投影正反算MFC
- 白塞尔大地主题解算MFC
- 基于MFC的OpenCV图像显示并标记ROI
- CEF:MFC 对话框 DemoVS2013
- MFC 音乐播放器傻 瓜教程
- MFC聊天室与文件传输
- MFC多语言界面切换
- 牛哥推荐很好的CMFCOutlookBar
- MSDN中文版下载261719
评论
共有 条评论