Цвет SetPixel при чтении отличается от начального значения - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Добрый день, коллеги! Возникла странная проблема. Загружаю изображение, закрашиваю на нем пиксель, сохраняю в файл, затем вновь загружаю это изображение и считываю этот пиксель, программа выдает совершенно другое значение... например, если я заношу цвет так
Листинг программы
  1. Dim bm As Bitmap = Image.FromFile(f)
  2. bm.SetPixel(500, 500, Color.FromArgb(255, 2, 2, 2))
  3. bm.Save(ListBox1.SelectedItem & "\Image.jpg")
то при считывании
Листинг программы
  1. Dim bm As Bitmap = Image.FromFile(f)
  2. msgbox(bm.GetPixel(500, 500).toString)
программа выдаёт цвет (255, 50, 19, 0) при этом, если сохранять в PNG формате, то все работает корректно...
Листинг программы
  1. bm.Save("\Image.png", System.Drawing.Imaging.ImageFormat.Png)
отсюда делаю вывод, что проблема именно в том, что при сохранении, у изображения меняются цветовые показатели, в зависимости от формата.. Кто подскажет, как правильно сохранять файл? jpg выбрал т.к. это максимально легкий и сжатый формат. форматы типа bmp и png не подходят, там размер получается раз в 20-40 больше...

Решение задачи: «Цвет SetPixel при чтении отличается от начального значения»

textual
Листинг программы
  1. Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
  2.     Dim myImageCodecInfo As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg)
  3.     Dim myEncoderParameters As EncoderParameters = New EncoderParameters(1)
  4.     myEncoderParameters.Param(0) = New EncoderParameter(Encoder.Quality, 100) '100 - сжатие с минимальными потерями (но не без потерь)
  5.     PictureBox1.Image.Save("tst1_100.jpg", myImageCodecInfo, myEncoderParameters)
  6. End Sub
  7. Private Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo
  8.     Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageDecoders()
  9.     Dim codec As ImageCodecInfo
  10.     For Each codec In codecs
  11.         If codec.FormatID = format.Guid Then
  12.             Return codec
  13.         End If
  14.     Next codec
  15.     Return Nothing
  16. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы