首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于显示一个图形(SetPixel),该如何处理

2012-05-01 
关于显示一个图形(SetPixel)想在屏幕上显示一个图形。我建立了一个200*200的数组f。里面一部分填1.一部分填0

关于显示一个图形(SetPixel)
想在屏幕上显示一个图形。
我建立了一个200*200的数组f。里面一部分填1.一部分填0
我用
for(int i = 0; i< 200; i++)
{
  for(int j = 0; j < 200 ; j++)
  {
  if(f[i*200+j] == 1)
  SetPixel(hdc,i,j,crColor);
  }
}
这个来画,
我在网上找了一下,说是可以一次性将数组写到显卡缓存里,然后显示。
但是找不到那种方法,大家帮我看看,我如此使用这个函数的方法是不是有问题呢。

下面是我在网上搜出来的
"如果想手动绘制每一个点的话,个人比较推荐用opengl;
绘制点比较占时间主要原因是内存和显卡缓存的交互比较慢;setPixel的原理是每调用一次就把内存数据写到显卡缓存上,这样画一个屏幕就得交换1024*768次。
比较快速的办法是先写好1024*768大小的一个数组,然后把这个数组一次性的写到显卡缓存里面去,这样画一个屏幕就只用交换一次。但是自己处理这个工作稍显麻烦~~所以建议用opengl;当然directx也行,不过个人不喜欢。"

[解决办法]
LZ的意思是自己画图形?还是需要写界面?如果需要写界面建议使用应用程序框架,如QT,MFC。

希望能够帮到你!
[解决办法]
用opengl的纹理加顶点就行
[解决办法]
SetPixel(hdc,i,j,crColor);
从这行看用的是mfc,那你可以建一个CBitmap,然后把数组中的内容绘制到CBitmap中
之后bitblt到窗口上
用opengl或者directx是舍近求远,而且需要学习很多东西才可以
[解决办法]
简单点采用显示缓冲,写到内存比写到IO快的多,先写到显示缓冲里面,再把显示缓冲BitBlt到显示器。
[解决办法]
BitBlt
The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context. 

BOOL BitBlt(
HDC hdcDest, // handle to destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left 
// corner
int nYDest, // y-coordinate of destination rectangle's upper-left 
// corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source device context
int nXSrc, // x-coordinate of source rectangle's upper-left 
// corner
int nYSrc, // y-coordinate of source rectangle's upper-left 
// corner
DWORD dwRop // raster operation code
);


[解决办法]
先画到内存中,画完后再一次性提交到屏幕

热点排行