我想要的是一次设很多个点,但是SetPixel 是每次设一个点,该怎么办?

以前我用过两个 Win API 函数,可以把窗口的图像存在一个数组里(每4个字节存一个像素的颜色)和把数组中的位图放到窗口里。
例如一个数组 int c[]={0,255,255,255} 放到窗口后窗口的颜色变成一个黑点和三个蓝点。
请问哪位大侠知道,告诉告诉我。
请不要一下子堆那么多函数给我,简单点来说,SetPixel 是每次设一个点,我想要的是一次设很多个点。
SetPixel 很慢……我想要快点的。
我知道 SetDIBits 可以,不够用法上不太清楚。

慕妹3146593
浏览 183回答 3
3回答

慕田峪4524236

API之绘图函数AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作AngleArc 用一个连接弧画一条线Arc 画一个圆弧BeginPath 启动一个路径分支CancelDC 取消另一个线程里的长时间绘图操作Chord 画一个弦CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄CloseFigure 描绘到一个路径时,关闭当前打开的图形CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝)CopyMetaFile 制作指定(标准)图元文件的一个副本CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)CreateEnhMetaFile 创建一个增强型的图元文件设备场景CreateHatchBrush 创建带有阴影图案的一个刷子CreateMetaFile 创建一个图元文件设备场景CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子CreatePen 用指定的样式、宽度和颜色创建一个画笔CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔CreateSolidBrush 用纯色创建一个刷子DeleteEnhMetaFile 删除指定的增强型图元文件DeleteMetaFile 删除指定的图元文件DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放DrawEdge 用指定的样式描绘一个矩形的边框DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序DrawFocusRect 画一个焦点矩形DrawFrameControl 描绘一个标准控件DrawState 为一幅图象或绘图操作应用各式各样的效果Ellipse 描绘一个椭圆,由指定的矩形围绕EndPath 停止定义一个路径EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录EnumObjects 枚举可随同指定设备场景使用的画笔和刷子ExtCreatePen 创建一个扩展画笔(装饰或几何)ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域FillPath 关闭路径中任何打开的图形,并用当前刷子填充FillRect 用指定的刷子填充一个矩形FlattenPath 将一个路径中的所有曲线都转换成线段FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域FrameRect 用指定的刷子围绕一个矩形画一个边框GdiComment 为指定的增强型图元文件设备场景添加一条注释信息GdiFlush 执行任何未决的绘图操作GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列GetArcDirection 画圆弧的时候,判断当前采用的绘图方向GetBkColor 取得指定设备场景当前的背景颜色GetBkMode 针对指定的设备场景,取得当前的背景填充模式GetBrushOrgEx 判断指定设备场景中当前选定刷子起点GetCurrentObject 获得指定类型的当前选定对象GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里GetEnhMetaFileDescription 返回对一个增强型图元文件的说明GetEnhMetaFileHeader 取得增强型图元文件的图元文件头GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区GetMiterLimit 取得设备场景的斜率限制(Miter)设置GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色GetObjectAPI 取得对指定对象进行说明的一个结构GetObjectType 判断由指定句柄引用的GDI对象的类型GetPath 取得对当前路径进行定义的一系列数据GetPixel 在指定的设备场景中取得一个像素的RGB值GetPolyFillMode 针对指定的设备场景,获得多边形填充模式GetROP2 针对指定的设备场景,取得当前的绘图模式GetStockObject 取得一个固有对象(Stock)GetSysColorBrush 为任何一种标准系统颜色取得一个刷子GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形LineDDA 枚举指定线段中的所有点LineTo 用当前画笔画一条线,从当前位置连到一个指定的点MoveToEx 为指定的设备场景指定一个新的当前画笔位置PaintDesk 在指定的设备场景中描绘桌面墙纸图案PathToRegion 将当前选定的路径转换到一个区域里Pie 画一个饼图PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录PlayMetaFile 在指定的设备场景中回放一个图元文件PlayMetaFileRecord 回放来自图元文件的单条记录PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成Polygon 描绘一个多边形Polyline 用当前画笔描绘一系列线段PolyPolygon 用当前选定画笔描绘两个或多个多边形PolyPolyline 用当前选定画笔描绘两个或多个多边形Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充SelectClipPath 将设备场景当前的路径合并到剪切区域里SelectObject 为当前设备场景选择图形对象SetArcDirection 设置圆弧的描绘方向SetBkColor 为指定的设备场景设置背景颜色SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件SetMiterLimit 设置设备场景当前的斜率限制SetPixel 在指定的设备场景中设置一个像素的RGB值SetPixelV 在指定的设备场景中设置一个像素的RGB值SetPolyFillMode 设置多边形的填充模式SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数WidenPath 根据选定画笔的宽度,重新定义当前选定的路径

慕神8447489

API里好像没有直接用数组处理像素的,只能获得窗口的DC用SetPixel处理吧,如果怕闪烁,到可以先创建一个当前窗口后备缓存DC在SetPixel完再bitblt到窗口就可以。

哔哔one

没有快一点的,SetPixel是最基本的了,要不你试试BitBlt或PaintRgn
打开App,查看更多内容
随时随地看视频慕课网APP