MFC设置区域每个像素点颜色并绘制出来

如题 336*256 矩形 目前使用CDC::SetPixel 这样每个点去画效率太低有没有更好的方法

2个回答

这种情况常规的做法是生成一个内存DC,然后用SetPixel函数往内存DC上画东西,最后用BitBlt函数把内存DC给拷贝到屏幕上去。
如果希望速度更快,那可以生成一个设备无关位图,然后直接去操作内存,最后显示到屏幕上去。

IAMsuyuhui
IAMsuyuhui 能不能贴一下操作内存的代码 之前没用过这种
一年多之前 回复

最高效的方法是创建一副位图对象,然后锁定其缓冲区,在缓冲区中直接对颜色矩阵进行修改,然后再将位图渲染到界面上:
1、创建 Bitmap 对象;
2、用 LockBits 获得位图原始数据缓冲区;
3、在缓冲区上应用任何图像处理操作,包括像素赋值;
4、用 UnlockBits 提交缓冲区数据到位图对象;
5、将位图对象渲染到DeviceContext。

参考代码:

// 获取位图缓冲区
BitmapData bitmapData;
pBitmap->LockBits(&Rect(0,0,pBitmap->GetWidth(), pBitmap->GetHeight()), ImageLockModeWrite, PixelFormat32bppARGB, &bitmapData);

// 获得缓冲器地址
unsigned int pRawBitmapOrig = (unsigned int)bitmapData.Scan0;

// 编辑像素值
....

// 提交修改到位图对象
pBitmap->UnlockBits(&bitmapData);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
像素点的绘制
初级教程分22个课时,在教程中,我们会制作一些游戏程序。在实现游戏功能的过程中讲解该游戏应用到的C++基础知识点和DirectX API。通过结合实战讲解知识将更有利于你对C++的学习对DirectX API的认识,你也能深刻理解游戏开发过程。
PHP获取图片每个像素点
PHP获取图片每个像素点 $i = imagecreatefromjpeg("test.jpg"); //图片路径 for ($x = 0; $x < imagesx($i); $x++) { for ($y = 0; $y < imagesy($i); $y++) { $rgb = imagecolor
opencv 访问每个像素点
/http://blog.csdn.net/moc062066   //20111128   #include "opencv2/opencv.hpp"   #include       using namespace std;   using namespace cv;       int main(int argc,char** argv)   {          co
MFC获取编辑框内容并设置颜色
IDC_RESPONSE_EDIT为编辑框的ID,获取该编辑框的内容并设置内容为红色和绿色rnrn求代码
怎样用evc绘制不规则区域,并填充颜色?
VC中可以用BeginPath,EndPath和PathToRegion来创建任意形状的Region,并可以调用FillRegion填充颜色。但是evc根本就没有前三个GDI函数,它只支持创建矩形区域,可以用CreateRectRgn。rn哪位高手知道有什么方法可以创建任意形状的区域并填充颜色?请指点迷津。
绘制像素点和直线
本套教程的目标是让Cocos2d-x初学者掌握Cocos2d-x 3.0的基本开发技术(包括开发环境的搭建、Director、Node、Scene、Layer等,这些技术都是开发游戏的技术。并且可以利用本套 教程讲解的技术实现一个射击类游戏:星空大战。
用像素点绘制正弦曲线
<p>rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<p>rn <br />rn</p>rn<p>rn <img src="https://img-bss.csdn.net/201908080321173069.png" alt="" /> rn</p>rn<p>rn <br />rn</p>rn<p>rn 本课程属于《Python大讲堂》系列课程,全面深入讲解了PyQt5的核心API以及扩展应用。PyQt5视频培训课程的主要内容:rn1. Qt Designerrn2. PyQt5基本窗口控件rn3. PyQt5高级组件rn4. PyQt5布局管理rn5. PyQt5信号与槽rn6. PyQt5图形与特效rn7. PyQt5扩展应用rn</p>
SetPixel函数不能正确设置像素点的颜色
[code=c]void InitDC()rnrn windowDC = GetDC(g_hWnd);rn memDC = CreateCompatibleDC(NULL);rn memBMP = CreateCompatibleBitmap(memDC, 2 * WIDTH, 2 * HEIGHT);rn SelectObject(memDC, memBMP);rn BitBlt(memDC, 0, 0, 2 * WIDTH, 2 * HEIGHT, windowDC, 0, 0, SRCCOPY);rn for (int i = 0; i < 100; i++)rn SetPixel(memDC, i, i, RGB(255, 0, 0));rn BitBlt(windowDC, 0, 0, 2 * WIDTH, 2 * HEIGHT, memDC, 0, 0, SRCCOPY);rn[/code]rn结果不是红色的直线,而是黑色的。rnSetPixel的返回值是0(黑色)。rnGetLastError的结果是6。rn求教该怎么处理这样的情况。
通过像素点绘制RawImage
通过像素点绘制RawImage 需要注意的地方: 1,RawImage 左下角是 0 0 点,绘制的时候是从左下角开始的。 2,Texture2D 像素绘制完毕之后Apply 才会生效 Texture2D td2; private int with; private int heigh; private RawImage rI
DataGrid表格多出来的一块区域怎么设置这个颜色?
[code=XML]rn rn rn rnrn rnrn rn rn rn rn rn rn rn rn rn rnrn[/code]rnrn假如没有ItemsSource="Binding Source=StaticResource LineX"这句的话,边上没有控件默认色的那块东西。多出来这个绑定,就出来这块颜色,这个颜色能去掉么?不去掉的话,怎么改他的颜色?
opengl 获取像素点颜色
opengl获取像素点颜色
像素点颜色比较
我们怎么比较像素点颜色,使人看上去感觉是一样的颜色!rnhttp://www.bjx.com.cn/files/wx/sjcjycl/2002-4/21.htm上的An我找不值!不知道是从哪来的
opencv像素点颜色获取
在4通道CV_8UC4Mat 图像中 如何获取指定点像素rgb颜色值,好像cbget2d函数没法用在4通道图像中
像素点颜色的存储
我想扫描一块区域的BMP图,把各像素点的颜色值COLORREF 存到一个数组中,可好像没有COLORREF这样的数组(我定义使用rnrn时出错了)。 请问用什么类型的数组才能存储我遍历到的各像素点的颜色值。或说不能用数组,非得用文件操作把BMP颜色值存进rnrnDAT文件中去?rn rn 各位应该已经看出来了,我用的是很笨的方法,哪位可以告诉我一个更好的方法,我不胜感激!rnrn 还有我Load一张位图,操作完了,我想让它消失,在它所占的地方重新Load另外一张Bmp处理。我用RedrawWindow()不rnrn管用,请问怎么办?rnrn 谢谢了!
获取像素点的颜色
请问在处理位图时,如何获取某一个像素点的颜色?
MFC对话框颜色设置
//对话框颜色控制代码   //对话框变量  HBRUSH m_brushBack; HBRUSH FunctionWindowA::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { /* 问题的根本原因是需要需要设置对话框及其控件为不同的背景颜色以美化界面, 从而使用了 HBRUSH m_brushBack对象,尤其是
MFC设置按钮颜色
将按钮模式设置为ower draw void CKeyBoardTest::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your message handler code here and/or call default if(nIDCtl==IDC_BUTTON_CAP)
MFC设置字体及颜色
很好的东西 对于窗口从画是一个很好的资料
MFC—按钮颜色设置
MFC制作按钮,设置颜色
MFC Static 设置颜色
我在static上面设置文字,比如:hello worldhello!rnrn我现在想让world颜色变为红色,其它的不变
MFC 设置对话框的颜色
改变对话框的颜色,重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。
设置视场窗口绘制颜色
绘制二次元或显示其它辅助线等对象的时候,如果视场图像的主色与这些对象的颜色接近的话,对比度不够大,识别起来比较困难。因此,经常需要根据视场图像的主色调整对象的颜色。  机器视觉大师视场绘制对象包括网格线,坐标尺,测量线,ROI框,二次元等,这些对象的颜色都可以在绘制之前进行自定义。除了这些对象,还可以自定义检测结果栏的颜色,空白帧等颜色。  检测结果栏的颜色设置包括背景和文字颜色两种,其颜色设
查看每个像素点的像素值
bmp文图等获取每个位置的像素rgb数值
读bmp每个像素点的数据
#include rn#include rn#include rn#include rn#include rn#include rnrnrn#define WIDTHBYTES(bits) (((bits)+31)/32*4)rnrntypedef unsigned char BYTE;rntypedef unsigned short WORD;rntypedef unsigned long DWORD;rntypedef long LONG;rnrntypedef struct tagBITMAPFILEHEADER rnrnDWORD bfSize; //文件大小rnWORD bfReserved1; //保留字,不考虑rnWORD bfReserved2; //保留字,同上rnDWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和rn BITMAPFILEHEADER;rnrnrn//信息头BITMAPINFOHEADER,也是一个结构,其定义如下:rnrntypedef struct tagBITMAPINFOHEADERrn//public:rnDWORD biSize; //指定此结构体的长度,为40rnLONG biWidth; //位图宽rnLONG biHeight; //位图高rnWORD biPlanes; //平面数,为1rnWORD biBitCount; //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32rnDWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩rnDWORD biSizeImage; //实际位图数据占用的字节数rnLONG biXPelsPerMeter; //X方向分辨率rnLONG biYPelsPerMeter; //Y方向分辨率rnDWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)rnDWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的rn BITMAPINFOHEADER;rnrnrn//调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。24位和32位是不需要调色板的。rn//(似乎是调色板结构体个数等于使用的颜色数。)rnrntypedef struct tagRGBQUAD rn//public:rnBYTE rgbBlue; //该颜色的蓝色分量rnBYTE rgbGreen; //该颜色的绿色分量rnBYTE rgbRed; //该颜色的红色分量rnBYTE rgbReserved; //保留值rn RGBQUAD;rnrnrnrnvoid showBmpHead(BITMAPFILEHEADER* pBmpHead)rnrnprintf("位图文件头:\n");rnprintf("文件大小:%d\n",pBmpHead->bfSize);rnprintf("保留字:%d\n",pBmpHead->bfReserved1);rnprintf("保留字:%d\n",pBmpHead->bfReserved2);rnprintf("实际位图数据的偏移字节数:%d\n",pBmpHead->bfOffBits);rnrnrnrnrnvoid showBmpInforHead(tagBITMAPINFOHEADER *pBmpInforHead)rnrnprintf("位图信息头:\n");rnprintf("结构体的长度:%d\n",pBmpInforHead->biSize);rnprintf("位图宽:%d\n",pBmpInforHead->biWidth);rnprintf("位图高:%d\n",pBmpInforHead->biHeight);rnprintf("biPlanes平面数:%d\n",pBmpInforHead->biPlanes);rnprintf("biBitCount采用颜色位数:%d\n",pBmpInforHead->biBitCount);rnprintf("压缩方式:%d\n",pBmpInforHead->biCompression);rnprintf("biSizeImage实际位图数据占用的字节数:%d\n",pBmpInforHead->biSizeImage);rnprintf("X方向分辨率:%d\n",pBmpInforHead->biXPelsPerMeter);rnprintf("Y方向分辨率:%d\n",pBmpInforHead->biYPelsPerMeter);rnprintf("使用的颜色数:%d\n",pBmpInforHead->biClrUsed);rnprintf("重要颜色数:%d\n",pBmpInforHead->biClrImportant);rnrnrnvoid showRgbQuan(tagRGBQUAD* pRGB)rn rnprintf("(%-3d,%-3d,%-3d) ",pRGB->rgbRed,pRGB->rgbGreen,pRGB->rgbBlue);rnrnrnrnrnrnvoid main()rnrnrnBITMAPFILEHEADER bitHead;rnBITMAPINFOHEADER bitInfoHead; rnFILE* pfile;rnrnchar strFile[50];rnprintf("please input the .bmp file name:\n");rnscanf("%s",strFile);rnrnpfile = fopen(strFile,"rb");//打开文件rnrnif(pfile!=NULL)rnrn printf("file bkwood.bmp open success.\n");rn //读取位图文件头信息rn WORD fileType;rn fread(&fileType,1,sizeof(WORD),pfile);rn if(fileType != 0x4d42)rn rn printf("file is not .bmp file!");rn return;rn rn //fseek(pfile,2,SEEK_CUR); // "BM"rn fread(&bitHead,1,sizeof(tagBITMAPFILEHEADER),pfile);rn rn showBmpHead(&bitHead);rn printf("\n\n");rnrn //读取位图信息头信息rn fread(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),pfile);rn showBmpInforHead(&bitInfoHead);rn printf("\n");rnrnelsernrn printf("file open fail!\n");rn return;rnrnrnrntagRGBQUAD *pRgb ;rnrnif(bitInfoHead.biBitCount < 24)//有调色板rn rn //读取调色盘结信息rn long nPlantNum = long(pow(2,double(bitInfoHead.biBitCount))); // Mix color Plant Number;rn pRgb=(tagRGBQUAD *)malloc(nPlantNum*sizeof(tagRGBQUAD)); rn memset(pRgb,0,nPlantNum*sizeof(tagRGBQUAD));rn int num = fread(pRgb,4,nPlantNum,pfile);rn rn printf("Color Plate Number: %d\n",nPlantNum);rnrn printf("颜色板信息:\n");rn for (int i =0; i>7;rn break;rn case 1:rn mixIndex = mixIndex<<6;rn mixIndex = mixIndex>>7;rn break;rn case 2:rn mixIndex = mixIndex<<5;rn mixIndex = mixIndex>>7;rn break;rnrn case 3:rn mixIndex = mixIndex<<4;rn mixIndex = mixIndex>>7;rn break;rn case 4:rn mixIndex = mixIndex<<3;rn mixIndex = mixIndex>>7;rn break;rnrn case 5:rn mixIndex = mixIndex<<2;rn mixIndex = mixIndex>>7;rn break;rn case 6:rn mixIndex = mixIndex<<1;rn mixIndex = mixIndex>>7;rn break;rnrn case 7:rn mixIndex = mixIndex>>7;rn break;rn rnrn //将像素数据保存到数组中对应的位置rn dataOfBmp[index].rgbRed = pRgb[mixIndex].rgbRed;rn dataOfBmp[index].rgbGreen = pRgb[mixIndex].rgbGreen;rn dataOfBmp[index].rgbBlue = pRgb[mixIndex].rgbBlue;rn dataOfBmp[index].rgbReserved = pRgb[mixIndex].rgbReserved;rn index++;rnrn rn rnrn if(bitInfoHead.biBitCount==2)rn rn for(int i=0;i>6;rn break;rn case 1:rn mixIndex = mixIndex<<4;rn mixIndex = mixIndex>>6;rn break;rn case 2:rn mixIndex = mixIndex<<2;rn mixIndex = mixIndex>>6;rn break;rn case 3:rn mixIndex = mixIndex>>6;rn break;rn rnrn //将像素数据保存到数组中对应的位置rn dataOfBmp[index].rgbRed = pRgb[mixIndex].rgbRed;rn dataOfBmp[index].rgbGreen = pRgb[mixIndex].rgbGreen;rn dataOfBmp[index].rgbBlue = pRgb[mixIndex].rgbBlue;rn dataOfBmp[index].rgbReserved = pRgb[mixIndex].rgbReserved;rn index++;rnrnrn rn rn if(bitInfoHead.biBitCount == 4)rn rn for(int i=0;i>4;rn rn elsern //高rn mixIndex = mixIndex>>4;rn rnrn dataOfBmp[index].rgbRed = pRgb[mixIndex].rgbRed;rn dataOfBmp[index].rgbGreen = pRgb[mixIndex].rgbGreen;rn dataOfBmp[index].rgbBlue = pRgb[mixIndex].rgbBlue;rn dataOfBmp[index].rgbReserved = pRgb[mixIndex].rgbReserved;rn index++;rnrn rnrn rn if(bitInfoHead.biBitCount == 8)rn rn for(int i=0;i
java获取图片每个像素点的RGB
http://tinyking.blog.51cto.com/3338571/749045
MFC绘制曲线并移动
我在单文档下绘制了个曲线,现在我想选中并移动它怎么办啊?
MFC CDC 区域绘制文字居中显示
在某些子项的名字长度未知的情况下,使其在某个矩形区域居中显示 超出像素宽度呼,文字字符长度减2并用…结尾 类似下图: ... CDC *pDC = GetDC(); //代码片段 CFont ftText; ftText.CreatePointFont(90,_T("微软雅黑")); CRect rcToolName;//文字
Qt 调用dll,绘制像素点
我用QT绘图方式绘制像素点时,因为频繁调用获取屏幕坐标的dll,导致绘制响应很慢,怎么解决?比如调用dll960*540次,就会响应的很慢。
MFC ToolBar 旁边的空白区域怎么绘制?
RT:rn 正在用MFC做个界面,很久没用,生疏了。rn TOOLBAR 做成24BIT彩色的,问题不大,但是旁边的空白区域也想搞美观点,一时没找到在哪绘制的。rn 哪位朋友给个提示,谢谢!rn
Qt快速绘制像素点的处理方法
在有些情况下,我们需要对屏幕上的像素点进行大量的绘制操作。比如我之前模拟写的一个渲染管线开源练习,涉及到了大量的像素点操作。而Qt本身的QPen和QPainter::drawPoint的API如果操作大量的像素点,会非常耗时,因此我Google了这个方式: 原文链接:https://www.vikingsoftware.com/qwidget-pixel-drawing-2/ 以下是核心代码: #...
win32 7.2 绘制图形 - 绘制像素点
在 DC 上绘制像素点是绘图最基本的操作,使用方法是: SetPixel 函数在 hDC的 dwX,dwY 位置以 dwColor 为颜色画上一个像素点。 如果需要获取某个像素点的颜色值,可以使用: 应用场景与缺点: 虽然绘画像素是最基本的绘图操作方法,但是在程序中一般很少使用 SetPixel 函数,因为它的开销太大了,只适合在需要少量绘画像素的地方,如果要绘画一个区域,那么最好使用画...
MFC单文档应用程序,绘制的字体,如何设置颜色
例如: dc.TextOut("如何将我的黑色颜色变成红色");rnrn绘制出来的文字总是黑色的,我怎么样做,才能把字体的颜色变成红的
如何使用pygame模块绘制一个窗口并设置颜色
1、实现源码 import sys; import pygame; pygame.init(); s = width,height = 600,400; sc = pygame.display.set_mode(s); c = (0,153,204); while True: for e in pygame.event.get(): if e.type == pyg...
iOS 遍历图片每个像素点并修改rgb值
- (void)drawImage {     CGImageRef cgimage = [self.imageView.image CGImage];          size_t width = CGImageGetWidth(cgimage); // 图片宽度     size_t height = CGImageGetHeight(cgimage); // 图片高
unity 改变纹理像素点的颜色
using UnityEngine; using System.Collections; public class SendLine : MonoBehaviour { public Vector3 targetPoint; private Transform MyTransform; public Texture2D TextureMap; void Start (
读取FLASH像素点颜色问题
我用CShockwaveFlash这个控件 做一个FLASH播放器,然后 在另一个窗口画了很多格子, 我想把FLASH的每个像素与每个格子相对应, 当播放的时候每个格子都显示和FLASH像素相对应的颜色,有谁可以给点思路么具体可以怎么做? 或者CShockwaveFlash这个控件本身有取像素点的方法,请告诉我啊,小弟感激不尽。。。。。。
如何取得一个像素点的颜色?
我想返回鼠标点击的点的颜色,怎么办?
Graphics2D、获取当前像素点颜色
1、改变画笔的大小是Graphics所不具有的,应该创建一个Graphics2D对象,他是Graphics的子类, 然后调用其setStroke()方法,而setStroke()需要一个Stroke做参数,但是Stroke类是一个接口,所以我们转用一个BasicStroke来实现他。 所以方法如下,5为画笔的大小。 [code=&quot;java&quot;] Graphics2D g2 = (Graphi...
UE4获得屏幕像素点颜色
FLinearColor UMyUserWidget::NowMousePointColor() { FIntPoint MousePos; GetWorld()-&amp;gt;GetGameViewport()-&amp;gt;Viewport-&amp;gt;GetMousePos(MousePos, false); return FGenericPlatformApplicationMisc::GetScreen...
mfc中滑块控件设置颜色
滑块控件的使用,适合初学者,简单易懂
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制