Заголовок в значительной степени объясняет мой вопрос. Я хотел бы смочь считать и записать данные JPEG на основе на пиксель с помощью C#.
Я думаю что-то вроде CreateJPEG(x, y)
который настроил бы пустое изображение JPEG в памяти и даст мне объект JPEG и затем что-то как SetPixel(x, y, Color)
и GetPixel(x, y)
последний которого возвратил бы a Color
или что-то подобное. Вы могли затем звонить Apply()
или Save()
метод, например, для сохранения изображения в стандартном читаемом JPEG формате (предпочтительно с опциями сжатия но это не необходимо).
И я принимаю некоторую библиотеку C#, или пространство имен делает этот весь очень легким процессом, я был бы точно так же, как для знания лучшего способа пойти об этом.
Рассмотрите класс Bitmap
. Для расширенного рисования, помимо манипуляций с отдельными пикселями, вам придется использовать класс Graphics
.
var image = new Bitmap("foo.jpg");
var color = image.GetPixel(1, 2);
image.SetPixel(42, 42, Color.White);
image.Save("bar.jpg", ImageFormat.Jpeg);
Как упоминает в своем ответе Lasse V. Karlsen, это не будет действительно манипулировать файлом JPEG. JPEG-файл будет распакован, данные изображения будут изменены, и при сохранении будет создан новый JPEG-файл из измененных данных изображения.
Это снизит качество изображения, потому что даже повторное сжатие неизмененного изображения обычно не дает битово-идентичного JPEG-файла из-за природы сжатия JPEG с потерями.
Есть некоторые операции, которые можно выполнять с файлами JPEG без декомпрессии и рекомпрессии - например, поворот на 90° - но манипуляции с отдельными пикселями в эту категорию не входят.
JPEG - это не формат обработки, это формат хранения.
Таким образом, вы фактически не используете изображение JPEG в памяти, у вас есть просто изображение. Только когда вы его сохраняете, вы выбираете формат, например PNG или JPEG.
Таким образом, я считаю, что вы ищете класс Bitmap в .NET.