Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Информация о пикселах графических файлов

Автор: Vinchkovsky 17.02.2007 22:20

Есть следующая задача - открыть небольшой графический файл (64*64) и записать массив массивов цветов этих точек. Вторая часть ясна, но как прочитать информацию о пикселе?
Читал http://forum.pascal.net.ru/index.php?showtopic=4533 тему, без описания модулей трудно понять.
Возможна реализация на Дельфи. wink.gif

Автор: мисс_граффити 17.02.2007 23:03

Цитата
Возможна реализация на Дельфи.

что-то типа такого?
var pic:TBitmap;
begin
pic:=TBitMap.Create;
pic.LoadFromFile('имя_файла_с_картинкой');
mas[x,y]:=pic.Canvas.Pixels[x,y];
end;


Автор: klem4 18.02.2007 1:47

Цитата
но как прочитать информацию о пикселе


GetPixel(x, y: Integer): Word; // вернет цвет


Это для Pascal'я

Автор: Vinchkovsky 18.02.2007 15:17

Большое спасибо... Но я с этим в первый раз на Дельфи сталкиваюсь, возник ламерский вопрос - как собственно открыть графический файл (чтобы появилось окно проводника)? Буду очень рад ссылке на FAQ по этой теме. wink.gif

Автор: mamont001 18.02.2007 15:40

Ставиш компонент OpenPictureDialog и лезеш в help

Автор: Vinchkovsky 18.02.2007 17:59

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

  pic:=TBitMap.Create;
pic.LoadFromFile(Fname);
Color:=pic.Canvas.Pixels[1,1];
Edit1.Text:=
inttohex(GetRValue(Color),2) +
inttohex(GetGValue(Color),2) +
inttohex(GetBValue(Color),2) ;

В Edit1.Text все супер, но фон окна становится таким же, какой и цвет пиксела. Почему? Как с этим справится?
Уже понял, что немного ошибся разделом форума. secret.gif

Автор: volvo 18.02.2007 18:06

Цитата
Почему? Как с этим справится?
Почему? Потому, что под Color здесь имеется в виду TForm.Color (наведи мышь на слово Color, и ты увидишь это).

Как справиться? Вводить доп. переменную, например, myColor: TColor, и делать:

...
myColor:=pic.Canvas.Pixels[1,1];
Edit1.Text:=
inttohex(GetRValue(myColor),2) +
inttohex(GetGValue(myColor),2) +
inttohex(GetBValue(myColor),2) ;
...

Автор: -vinchkovsky- 24.02.2007 0:35

volvo , большое спасибо. (Хотя не совсем понятно,почему локальная переменная имеет желаемое действие в отличии от глобальной) wink.gif
Ещё один вопрос - почему операцией открытия графических файлов не удается открыть .jpeg файлы? Код кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
FName := OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile(FName);
end;
end;

Фильтр:
Код
(*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)
rolleyes.gif

Автор: volvo 24.02.2007 0:45

Цитата
Хотя не совсем понятно,почему локальная переменная имеет желаемое действие в отличии от глобальной
Рассказываю: То, что использовал ты - это НЕ глобальная переменная, а property (свойство) класса TForm, которое как раз и отвечает за то, что изменяет цвет формы (даже если у тебя и описана где-то глобальная переменная с тем же именем, преимущество здесь будет иметь именно property, и именно с ним осуществляется работа). Как ты думаешь, что будет, если задать этому свойству какой-то цвет? А ничего, кроме того, что должно быть: цвет формы изменится. Что ты и наблюдал. А локальная переменная избавляет тебя от подобного поведения...

А чтобы открывать Jpeg файлы, надо подключить модуль Jpeg в Uses...