2 luyangever luyangever 于 2016.04.20 13:50 提问

MFC中bitblt拷贝的问题

我需要在mfc中拷贝原图再在相同的位置把图片粘贴回来,我自己写的小程序也能够正确做到,但是不知道为啥在我修改别人的程序时粘贴时就出了问题。
无操作原图:
图片说明
当我进行简单的自身拷贝自身时:
pDC->BitBlt(LpRect.left +100, LpRect.top, 200, 1688, pDC, LpRect.left, LpRect.top, SRCCOPY);
图片:
图片说明
但是当我复制后再粘贴时:
CDC curveDC;
CBitmap bitmap,*pOldBitmap;
curveDC.CreateCompatibleDC(rectinfo.testDC);
bitmap.CreateCompatibleBitmap(rectinfo.testDC,200,1688);
pOldBitmap = curveDC.SelectObject(&bitmap);

curveDC.BitBlt(0, 0, 200, 1688, pDC, LpRect.left, LpRect.top, SRCCOPY); 
pDC->BitBlt(LpRect.left +100, LpRect.top, 200, 1688,    &curveDC, 0,0, SRCCOPY);

图片说明
想不明白为什么会出现黑色框中多余的线条,是我复制的时候哪里出错了?
程序在http://share.weiyun.com/53c6af81c21f26b95d21027b0eda2c22

安装步骤为
解压后最好放在e盘根目录下
1 解压后运行Graphic.sln编译通过后,以管理员身份运行cmd,
根据具体目录注册ocx,例如 regsvr32 E:\GraphicOcx\Graphic\Debug\Graphic.ocx
2 运行test目录下的WindowsFormsApplication1.sln并编译成功
2 在Graphic的vs中,项目->属性->配置属性->调试->命令
导入test目录下的exe路径,例如E:\GraphicOcx\Test\WindowsFormsApplication1\
WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
3 如果界面出现则表示运行成功。如果不成功提示模板错误等
则修改GraphicOcx\Graphic\Debug下的Graphic.ini中DataPath路径和TemplateName路径为自己的实际路径

我提问的代码在Curve.cpp的1100行左右

1个回答

xxmvzeetbb
xxmvzeetbb   2016.10.05 23:51

代码如下: @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
// Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// 短按home键

mListener.onHomePressed();
} else if (reason
.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// 长按home键

mListener.onHomeLongPressed();
} else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reaso

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
浅谈MFC中BitBlt与StretchDIBits的区别
一、基础知识1.BitBlt BitBlt 用于从原设备中复制位图到目标设备,语法格式如下: BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // 目标矩形区域的左上角x轴坐标点。 int nYDest, // 目标矩形区域的左上角y轴坐标点。 int nWidth, // 在目标设备中绘制位图的宽度。
StretchBlt函数和BitBlt函数的用法
StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一、StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件) BOOL StretchBlt( int x, int y, int nWidth,
MFC函数之BitBlt
// Cgame123View 绘制 void Cgame123View::OnDraw(CDC* pDC) { Cgame123Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 CRect Rect; GetClientRect(&Rect);
BitBlt举例和图形旋转
 BitBlt是2D图形中,最简单的绘图函数。出个题:把某个图片,旋转一定角度,显示到屏幕上。我这个方法:计算出图片各个点旋转后的坐标,把每个点画到屏幕上。已知:图片大小64*64代码:   SelectObject(hdcmem, hBm);//选入DC   for(i=0;i   {    for(j=0;j    {     //计算旋转后的坐标     destx=i*
复制图像,类似Bitblt函数的复制。
实现将图像复制到另外一个图像的指定位置上去。类似于Bitblt函数。 用OpenCV函数,则需要下面这样做: #include "cv.h" #include "highgui.h" int main(int argc, char** argv) { IplImage* pImg = cvLoadImage("D:\\cvImg\\lin.jpg"); IplImage* pMax =
浅谈MFC中BitBlt与StretchDIBits的差别
一、基础知识 1.BitBlt BitBlt 用于从原设备中复制位图到目标设备,语法格式如下: BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // 目标矩形区域的左上角x轴坐标点。 int nYDest, // 目标矩形区域的左上角y轴坐标点。 int nWidth, // 在目标设备中
用BitBlt截取整屏后半透明窗口不能显示的解决办法
用vc对屏幕截屏,通用写法是 HWND hWnd = ::GetDesktopWindow(); HDC hDC = ::GetDC(hWnd); HDC hMemDC = ::CreateCompatibleDC(hDC); HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, 1024, 768); HBITMAP hOldBmp = (H
解决BitBlt 覆盖按钮问题
void COutOfWindowDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CWnd * pWnd = GetDesktopWindow(); CDC * pDC = pWnd->GetDC(); CBitmap
Delphi中BitBlt函数实现屏幕对象抓图
 uses WinTypes, WinProcs, Forms, Controls, Classes, Graphics;function CaptureScreenRect( ARect: TRect ): TBitmap;varScreenDC: HDC;beginResult := TBitmap.Create;with Result, ARect dobegin
bitblt简易使用教程
BitBlt 是VB较常用的绘图API函数,绘图速度基本上是API中最快的了。它虽然使用简单,但功能强大,以下我就来给新手们简单的讲解一下它  的用法  BitBlt 的声明如下(在窗体代码中须在前面加上Private关键字):  Declare Func**** BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long