The title pretty much explains my question. I would like to be able to read and write JPEG data on a per-pixel basis using C#.
I’m thinking something along the lines of CreateJPEG(x, y) which would set up a blank JPEG image in memory, and would give me a JPEG object, and then something like SetPixel(x, y, Color) and GetPixel(x, y) the latter of which would return a Color or something similar. You could then call an Apply() or Save() method, for example, to save the image in a standard JPEG-readable format (preferrably with compression options, but that’s not necessary).
And I’m assuming some C# library or namespace makes this all a very easy process, I’d just like to know the best way to go about it.
Have a look at the
Bitmapclass. For advanced drawing besides manipulating single pixel you will have to use theGraphicsclass.As Lasse V. Karlsen mentions in his answer this will not really manipulate the JPEG file. The JPEG file will be decompressed, this image data will be altered, and on saving a new JPEG file is created from the altered image data.
This will lower the image quality because even recompressing an unaltered image does usually not yield a bit-identical JPEG file due to the nature of lossy JPEG compressions.
There are some operations that can be performed on JPEG files without decompressing and recompressing it – for example rotating by 90° – put manipulating single pixels does not fit in this category.