Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
1

Создание TBitmap по пикселам

29.06.2014, 23:08. Показов 6053. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не пойму как реализовать создание TBitmap по пикселю. Что бы понять основную суть, нужен исходник.
К примеру var b1, b2 : TBitmap; После я их создаю Create. b1 я загружаю из файла 123.bmp.
После цикл в цикле, считывание каждого пиксела (цвет) в переменную с : TColor
Дальше r, g, b : Byte и нужно получить значения из с
После приравнять значения g и b к значению r
Записать новый пиксел с текущими координатами уже теперь в b2, а после её сохранить в файл 321.bmp
Помогите пожалуйста реализовать вышесказанное!
Заранее благодарю!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2014, 23:08
Ответы с готовыми решениями:

Tbitmap.create и Tbitmap.scanline
Если после создания bitmap-а загрузить изображение (loadfromfile()) то изменение пикселей через...

Создание компонента,как прикрутить TBitmap->Canvas
Как можно прикрутить канву например к TPanel что бы на нем можно было рисовать как на канве TImage...

OnScroll ListView по пикселам
OnScroll дает только индекс верхней записи. Пытаюсь нарисовать свой скролинг рядом со списком и......

Доступ к пикселам рисунка (не в аплете)
Народ! Проблема заключается в следующем - нужен доступ к пикселам загруженного битмэпа но не в...

4
Native x86
Эксперт Hardware
5596 / 3340 / 951
Регистрация: 13.02.2013
Сообщений: 10,587
29.06.2014, 23:17 2
Извлечение составляющих из TColor делается ф-циями GetRValue, GetGValue и GetBValue. Упаковка составляющих обратно в TColor делается функцией RGB. Доступ к пикселам TBitmap делается через массив Pixels свойства Canvas (Bitmap.Canvas.Pixels[x,y]).
0
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
29.06.2014, 23:22  [ТС] 3
Вот:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var c : TColor;
     b1, b2 : TBitmap;
     r, g, b : Byte;
     i, j : integer;
 
b1 := TBitmap.Create;
b1.LoadFromFile ('123.bmp');
b2 := TBitmap.Create;
 
for j := 0 to b1.Height - 1 do
   for i := 0 b2.Width - 1 do
     begin
       c := b1.Canvas.Pixels [i, j];
       r := GetRValue (c);
       g := r;
       b := r;
       b2.Canvas.Pixels [i, j] := RGB (r, g, b);
     end;
И после сохраняю в файл. Но этот код не работает. Изображение прозрачное, ничего на нём вообще нет.
0
Native x86
Эксперт Hardware
5596 / 3340 / 951
Регистрация: 13.02.2013
Сообщений: 10,587
30.06.2014, 00:22 4
Лучший ответ Сообщение было отмечено serёга как решение

Решение

Delphi
1
2
3
4
5
6
...
b2:= TBitmap.Create;
b2.PixelFormat:= pf24bit;
b2.Width:= b1.Width;
b2.Height:= b1.Height;
...
1
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
30.06.2014, 08:28 5
Дублирование красного канала во все остальные можно записать короче
Delphi
1
b2.Canvas.Pixels[i,j]:=byte(b1.Canvas.Pixels[i,j])*$010101;
Добавлено через 1 час 37 минут
А ещё лучше получить указатель на растр и работать с ним как с массивом
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  Pixels1,Pixels2: array of integer;
  i:               integer;
begin
  b1.PixelFormat:=pf32bit;
  b2.PixelFormat:=pf32bit;
  b2.Width :=b1.Width;
  b2.Height:=b1.Height;
  pointer(Pixels1):=b1.ScanLine[b1.Height-1]; //Битмап хранится в перевёрнутом виде
  pointer(Pixels2):=b2.ScanLine[b2.Height-1]; //Нижняя строка первая
  for i:=b1.Width*b1.Height-1 downto 0 do
    Pixels2[i]:=byte(Pixels1[i])*$010101;
  pointer(Pixels1):=0; //Если не обнулить указатели Delphi попытается автоматически освободить память
  pointer(Pixels2):=0; //это приведёт к ошибке
end;
1
30.06.2014, 08:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2014, 08:28
Помогаю со студенческими работами здесь

Работа с 48bit ной графикой по пикселам
Всем доброго времени суток. Задача в двух словах - получить доступ к цветам RGB каждого пикселя...

Как по пикселам "прочитать" картинку jpg
Понимаю, что для вас это несложно, но я реально не могу разобраться. Короче, в форме есть картинка...

Как по пикселам "прочитать" картинку jpg
Понимаю, что для вас это несложно, но я реально не могу разобраться. Короче, в форме есть картинка...

TBitMap
Как можно двигать по форме объект TBitMap? я хотел по циклу или по таймеру передвигать его...


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

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