Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
21 / 18 / 4
Регистрация: 07.02.2010
Сообщений: 59
1

SetPixel vs LockBits

15.04.2010, 18:12. Показов 3387. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет,народ!

редактирую картинку с помощью двух вариантов SetPixel и через LockBits.Изображение 24битное.bp некая нормированная матрица.
C#
1
2
3
4
5
6
7
 Bitmap nw = new Bitmap(640,480);
 for (int i = 0; i < 640; i++)      
  for (int j = 0; j < 480; j++)
 
 {
nw.SetPixel(i, j, Color.FromArgb((int)(bp1[i, j] * 255), (int)(bp1[i, j] * 255), (int)(bp1[i, j] * 255)));
 }
Теперь тоже самое делают через LockBits:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 Bitmap nw = new Bitmap(640,480);
System.Drawing.Imaging.BitmapData bmpData = nw.LockBits(new Rectangle(0, 0, 640, 480), System.Drawing.Imaging.ImageLockMode.ReadWrite, nw.PixelFormat);
 byte[] msv = new byte[bmpData.Stride * bmpData.Height];
 System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, msv, 0, msv.Length);
   for (int i = 0; i < 640; i++)      // перебор всех пикселей
                for (int j = 0; j < 480; j++)
                {
                    msv[bmpData.Stride * j + 3 * i] = (byte)(bp1[i, j] * 255); // b
                    msv[bmpData.Stride * j + 3 * i + 1] = (byte)(bp1[i, j] * 255); // g
                    msv[bmpData.Stride * j + 3 * i + 2] = (byte)(bp1[i, j] * 255);
                 }
 System.Runtime.InteropServices.Marshal.Copy(msv, 0, bmpData.Scan0, bmpData.Stride * bmpData.Height);
nw.UnlockBits(bmpData);
В результате получаются разные по цвету картинки.Вторая получается разреженнее...
1 - при помощи SetPixel()
2 - при помощи LockBits()

С чем это связано?
Миниатюры
SetPixel vs LockBits  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2010, 18:12
Ответы с готовыми решениями:

Как работать с методом LockBits?
Привет!У меня есть значения RGB ,как их занеcти в Bitmap через LockBits() и как считать значения...

Ошибка при использовании LockBits
Добрый день, подскажите пожалуйста, в чем моя ошибка. Я создаю Bitmap и пытаюсь с помощью,...

GetPixel VS LockBitmap(LockBits)
Всем привет. Есть картинка плохого качества ее нужно увеличить и хоть как то сохранить качество....

LockBits. Поиск одного изображения на другом
Hello, ребят, такой вопрос, или скорее просьба. На форуме искал, внятного ответа не нашел. Суть...

1
21 / 18 / 4
Регистрация: 07.02.2010
Сообщений: 59
15.04.2010, 19:11  [ТС] 2
Если например заполнять каждый пиксел как
C#
1
2
3
msv[bmpData.Stride * j + 3 * i] = 255; // b
                    msv[bmpData.Stride * j + 3 * i + 1] = 0; // g
                    msv[bmpData.Stride * j + 3 * i + 2] = 0;
то получается не цельная синяя картинка,а синие полосы............. вообще не пойму почему

Добавлено через 10 минут
ВСЁ! вопрос снят. видео с камеры оно-то 24битное,а вот:

Bitmap nw = new Bitmap(640,480); создает 32битный битмап. поэтому добавляется еще канал альфа и меняется адресация в массиве
0
15.04.2010, 19:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2010, 19:11
Помогаю со студенческими работами здесь

Получение R-компоненты цвета из Bitmap посредством LockBits и UnlockBits
Подскажите пожалуйста, как с помощью LockBits и UnlockBits получить только одну (а не все три...

Обработка изображений (LockBits). Проблемы с условием цикла по обработке каждого пикселя
Здравствуйте. Вопрос обстоит так. Хочу разобраться с обработкой изображений. Как понял, для этого...

SetPixel
Добрый день! Нашла в примерах программу, рисуется пиксель: raster.setPixel( v, jj, clr ); а...

SetPixel
Буду благодарен, если кто внятно поможет разобраться. Я делаю кодирование изображение, изображение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru