Drawing pixels on the screen with C

In summary, the conversation discusses the poster's struggle with finding a library that supports a putpixel(x,y) function for plotting points within a DOS window in C. They mention using assembly or manipulating video memory directly as potential solutions. Another user suggests using more modern compilers that support "windows" type graphics, such as Borland's "C++ Builder" or Microsoft's "Visual C++" with OpenGL. They also mention using the Win32 API directly and provide some tips on how to accomplish this. Another user suggests using a graphical toolkit, specifically the Qt toolkit, to make drawing to the screen easier. Other users suggest using libraries such as SDL or the old graphics.h library. The conversation ends with some humorous comments about the poster's
  • #1
Gza
449
0
Okay, from the title of this post, you can already tell I'm pretty much a noob when it comes to C. But the situation is that I have visual c++ 6.0, and haven't been able to find any libraries with a putpixel(x,y) type function that i can use to simply plot a point within a dos window. Would i have to use some assembly to do this and mess with video memory directly? thanks for the feedback.
 
Computer science news on Phys.org
  • #2
What compiler are you using? It used to be that most computer monitors did not support graphics so graphics methods were not routinely included in compilers.

More modern compilers support "windows" type graphics. In particular, Borland's "C++ Builder" has the "Canvas" class that includes the method "Canvas->Pixels[j] that sets pixels at screen coords (i,j). MicrosSoft's, "Visual C++" uses "OpenGL" that includes the command "glDrawPixels(i,j)".
 
  • #3
Do you want to draw in windows mode? There are several ways to accomplish this. If you you like C's procedural feel you can use the Win32 API directly without the MFC C++ OO-encapsulation classes. The basic way to acomplish this is to:.

1. Create a window, using the CreateWindow(...) function retaining the "handle" (pointer) that window
2. There is a window message handling procedure called "WndProc", which is called everytime the window receives a message (like being told to destroy itself). You need to get the "graphics" handle for the Window. This can be done in few ways, but the wizard included in the version of VC++ that I have uses a simple procedure called "BeginPaint". Looks like they learned their lesson from Java!
3. Use the "SetPixeL" function on the graphics handle of the window .

Visual C++ includes a "wizard" called "Win32 Application" which gives you a good chunk of the code that you need to accomplish this. It gives you a handle to the window it creats called "hWnd". You would then probably put your drawing functions in the WM_PAINT case of the "WndProc" procedure which handles window messages. It even gives you the handle to device context "hdc". You would then use the SetPixel function to accomplish your drawing.
 
  • #4
Possibly useful examples:

http://www.codeguru.com/forum/showthread.php?t=338284&goto=nextoldest
http://cis.stvincent.edu/swd/graphics/graphics.html
 
Last edited by a moderator:
  • #5
C has no built-in graphical toolkit whatsoever, so you cannot, by definition, do what you're doing in C alone. You will need a library to accomplish drawing to the screen. I strongly recommend the Qt toolkit -- it's free for non-commercial use, easy as pie to use, and very, very powerful. You will not find a toolkit that's better designed or more easy-to-use. http://www.trolltech.com/download/qt/evaluate.html

If you need any help getting started with Qt or any other graphical toolkit, please ask for help -- I, as well as many others here, can help you.

- Warren
 
Last edited by a moderator:
  • #6
thanks chroot and everyone else for your valuable advice and resources. I'm now able to draw on a window. I'll come back here to ask more questions when i begin work on my fully immersive 3d-engine for a massively multiplayer online game, with motion dictated by true to life physics, involving fields from general relativity to quantum mechanics. :smile:
 
  • #7
Oh, I thought everyone had one of those lying about someplace.
 
  • #8
go with SDL its very easy to learn...but if your looking for the simplest library...
its graphics.h(and prolly one fo the oldest)...it was usually packaged with C(borland) but VC++6.0 took it out. I can send you the old version.
 

FAQ: Drawing pixels on the screen with C

How do I draw a pixel on the screen using C?

To draw a pixel on the screen using C, you will need to use a graphics library such as SDL or OpenGL. These libraries have functions that allow you to set the color and position of a pixel on the screen. You can also use the putpixel() function in the graphics.h library.

Can I draw pixels with different colors on the screen?

Yes, you can draw pixels with different colors on the screen using C. As mentioned before, graphics libraries have functions that allow you to set the color of a pixel. You can also use the setcolor() function in the graphics.h library.

How can I draw a line or shape with pixels on the screen?

To draw a line or shape with pixels on the screen, you will need to use a graphics library that has functions for drawing lines and shapes. You can use the line() or circle() functions in the graphics.h library, or use the appropriate functions in SDL or OpenGL.

Is it possible to animate pixels on the screen using C?

Yes, it is possible to animate pixels on the screen using C. You will need to use a loop and update the position or color of the pixels in each iteration to create the animation. Graphics libraries like SDL and OpenGL also have functions specifically for creating animations.

Can I draw 3D graphics with pixels on the screen using C?

Yes, you can draw 3D graphics with pixels on the screen using C and a graphics library like OpenGL. These libraries have functions for creating and manipulating 3D objects, as well as setting the position of pixels in 3D space. It is important to have a good understanding of 3D graphics principles and algorithms before attempting to draw 3D graphics with pixels.

Back
Top