Как я могу считать и записать данные JPEG на основе на пиксель?

Заголовок в значительной степени объясняет мой вопрос. Я хотел бы смочь считать и записать данные JPEG на основе на пиксель с помощью C#.

Я думаю что-то вроде CreateJPEG(x, y) который настроил бы пустое изображение JPEG в памяти и даст мне объект JPEG и затем что-то как SetPixel(x, y, Color) и GetPixel(x, y) последний которого возвратил бы a Color или что-то подобное. Вы могли затем звонить Apply() или Save() метод, например, для сохранения изображения в стандартном читаемом JPEG формате (предпочтительно с опциями сжатия но это не необходимо).

И я принимаю некоторую библиотеку C#, или пространство имен делает этот весь очень легким процессом, я был бы точно так же, как для знания лучшего способа пойти об этом.

5
задан qJake 19 June 2013 в 19:17
поделиться

2 ответа

Рассмотрите класс 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° - но манипуляции с отдельными пикселями в эту категорию не входят.

9
ответ дан 18 December 2019 в 09:47
поделиться

JPEG - это не формат обработки, это формат хранения.

Таким образом, вы фактически не используете изображение JPEG в памяти, у вас есть просто изображение. Только когда вы его сохраняете, вы выбираете формат, например PNG или JPEG.

Таким образом, я считаю, что вы ищете класс Bitmap в .NET.

8
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: