Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2009, 19:16   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию определить цвет каждого пикселя

Как мне определить цвет каждого пикселя в картинке?
я погуглил и нашёл вот тут кучу функций
http://doc.trolltech.com/4.0/qimage.html
http://doc.trolltech.com/4.0/qcolor.html#qGreen
как было написано, сделал #include <QColor>
и написал
QRgb col;
for (int x=y=0;x<Image1->Picture->Width, y<Image1->Picture->Height;x++,y+)
{ col[x][y]=pixel(x,y);
}
в итоге, комплиятор не знает что такое #include <QColor>, не говоря уже о типе переменной
Dimarik вне форума Ответить с цитированием
Старый 16.08.2009, 20:19   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Как мне определить цвет каждого пикселя в картинке?
Можно поподробнее? Цвет одного любого пикселя? Всех сразу?
Цитата:
col[x][y]=pixel(x,y);
Вы их хотите в массив массивов записывать? о_О
Может не надо так-то?

Что именно требуется сделать в общих чертах и на каком языке?
Visual C++? C++ Bilder? (а Делфи видимо сразу отпадает? )
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 16.08.2009, 21:16   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

c++ Builder. мне надо зашифровать картинку. То есть цвет одного пикселя (r,g,b) - красного, например, увеличить на 5, другого пикселя - зелёного, например - увеличить на 10. а для того, чтобы какие-то операции проводить с пикселями, надо прежде всего определить цвет каждого.
Я хочу работать с каждым пикселем, именно поэтому и использую цикл. каждый пиксель имеет координаты х и у, поэтому для определения цвета, должен создаваться двумерный массив, col[x][y], который имеет тим TRect или что-то в этом духе.
Dimarik вне форума Ответить с цитированием
Старый 17.08.2009, 12:04   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

QImage и QColor это часть библиотеки Qt, чтобы их использовать нужно сначала установить её.
Можете открывать картинку как бинарный файл, узнавать тип изображения из заголовка и тогда менять всё что надо в картинке. По поводу разбора заголовка - в гугле много инфы на эту тему(если BMP, то там вообще ерунда )
netrino вне форума Ответить с цитированием
Старый 17.08.2009, 16:21   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Хм... Всё-таки Builder...
Его-то у меня и нету.....

Цитата:
цвет одного пикселя (r,g,b) - красного, например, увеличить на 5, другого пикселя - зелёного, например - увеличить на 10.
Цвет каждого пикселя состоит из трёх составляющих - R, G, B...
Вы хотите изменять все три сразу на одинаковое число или каждый в отдельности?

А обязательно делать массив-то? Может прям там же и изменять?

Говорят (сам не пробовал), что код для Делфи легко переделывается под Builder...
Вот для Делфи что-то вроде такого:
Код:
Type
      TRGB=Record Blue, Green, Red: Byte End;
      ARGB=Array [0..0] Of TRGB;
      PARGB=^ARGB;

Var Form1: TForm1; Bitmap: TBitmap;

...

Procedure TForm1.FormCreate(Sender: TObject);
Begin
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('C:\oll.bmp');
End;

Procedure TForm1.FormPaint(Sender: TObject);
Begin
BitBlt(Form1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
End;

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
Bitmap.Free;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var x, y, H, L: Integer; Line: PARGB;
Begin
H:=Bitmap.Height-1;
L:=Bitmap.Width-1;
For y:=0 To H Do
      Begin
      Line:=Bitmap.ScanLine[y];
      For x:=0 To L Do
            Begin
            Line[x].Red:=Line[x].Red+5;
            Line[x].Green:=Line[x].Green+10;
            Line[x].Blue:=Line[x].Blue+15;
            End;
      End;
BitBlt(Form1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два вопроса: Цвет пикселя и управление курсором MaslovArt Win Api 6 22.06.2012 20:34
Узнать цвет пикселя на экране, без снимка экрана. Alex Cones Общие вопросы Delphi 3 03.08.2009 12:02
схватить цвет пикселя, когда окно перекрыто или свёрнуто Василий Win Api 7 25.01.2009 22:29
Определить количество едениц продукции каждого типа, который должна изготавливать фирма LeMystere Microsoft Office Excel 2 25.12.2008 12:54
Быстро получить цвет пикселя... prizrak1390 Мультимедиа в Delphi 4 09.01.2008 20:28