简单的位图graphics在C + +?

我是一名Flash程序员,目前正在探索C ++。 在Flash中,您可以创build一个位图并将其放置在屏幕上,然后使用getPixel(x,y),setPixel(x,y,c)等方法。 按Ctrl + Enter,你可以开始做你想做的事情。

我使用Visual C ++ 2010.因为我已经使用Flash,所以我习惯于简单和简短的命令。 不过在C ++中,很难弄清楚如何获得一个可以操纵像素的位图。

我不太了解graphics引擎或3D引擎,这将是非常有用的信息,但首先我想看看我可以用像素创build什么,所以你知道一个简单的方法来创build一个可操作的位图在C + +? 尽可能优化,然后我可以写我自己的drawLine,drawCurve等function。 🙂

因为您提到了Visual C ++ 2010,所以我会假定您使用的是Vista或更高版本,并且希望先使用本地Windows C ++方法绘制2D图形。 如果是这种情况,你想使用Direct2D。 您可能会发现使用GDI的旧文章,但这是旧的方式,所以不要使用它。 以下是引入Direct2D的MSDN 链接 。

如果你真的想使用C ++,你应该看看使用GDI +,这是标准的Windows / VS图形方式。 这是一个稍微高一点的(友好的)API比旧的GDI API做图形,可以追溯到(预)MFC天。 您将需要获得设备上下文的基本把握等等,以了解如何从文件加载位图并将其显示在屏幕上。
CGI +允许使用LockBits方法以像素为单位轻松操作位图。 它可以读取最常见的图像格式(BMP,JPG,PNG等)。
下面的示例代码显示了一个典型的加载位图,并读取了一些像素类型代码(这是从这个msdn gdi +文章逐字记录

#include <windows.h> #include <gdiplus.h> #include <stdio.h> using namespace Gdiplus; INT main() { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); Bitmap* bitmap = new Bitmap(L"LockBitsTest1.bmp"); BitmapData* bitmapData = new BitmapData; Rect rect(20, 30, 5, 3); // Lock a 5x3 rectangular portion of the bitmap for reading. bitmap->LockBits( &rect, ImageLockModeRead, PixelFormat32bppARGB, bitmapData); printf("The stride is %d.\n\n", bitmapData->Stride); // Display the hexadecimal value of each pixel in the 5x3 rectangle. UINT* pixels = (UINT*)bitmapData->Scan0; for(UINT row = 0; row < 3; ++row) { for(UINT col = 0; col < 5; ++col) printf("%x\n", pixels[row * bitmapData->Stride / 4 + col]); printf("- - - - - - - - - - \n"); } bitmap->UnlockBits(bitmapData); delete bitmapData; delete bitmap; GdiplusShutdown(gdiplusToken); return 0; } 

至于绘制线,绘制曲线等例程 – 这些都在GDI +中的Graphics对象上找到。 它是你的代码和屏幕之间的主要对象。 Graphics对象将用于使用Graphics.DrawImage来呈现上述位图。

那么即将到来的答案可能是一个你不会喜欢的,但我会给它无论如何:)

C ++根本没有图形输出的概念。 幸运的是,我们已经获得了将文本打印到屏幕上的标准方式 – 但就是这样。 真。 这里不开玩笑

然而,大多数操作系统提供了一种图形输出的方式(大部分是通过C接口,因为C几乎是二进制兼容的),并且还有C ++包装库,可以访问这些库。 然而,处理操作系统问题是一个非常不同于C ++的野兽(我可以说这是一个有点野兽)。

幸运的是,如果你不想理解整个故事,我可以推荐Qt(http://qt.nokia.com/products/)作为GUI编程的一个很好的库&#x3002; 一旦你有一个GUI窗口,你也可以画出一个位图到该GUI(我相信Qt有直接的位图支持,也可以加载图像)。 不过,我将不得不引用你的Qt的教程文档,因为即使是一个简单的介绍将会是什么将是一个仍然可以理解的论坛答案。

而这恐怕就像使用C ++在屏幕上绘画一样简单。 这个目的远不止于Flash的简单性,而是最终更强大。

祝你好运。