Помощь - Поиск - Пользователи - Календарь
Полная версия: Информация о пикселах графических файлов
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Vinchkovsky
Есть следующая задача - открыть небольшой графический файл (64*64) и записать массив массивов цветов этих точек. Вторая часть ясна, но как прочитать информацию о пикселе?
Читал эту тему, без описания модулей трудно понять.
Возможна реализация на Дельфи. wink.gif
мисс_граффити
Цитата
Возможна реализация на Дельфи.

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

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


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


Это для Pascal'я
Vinchkovsky
Большое спасибо... Но я с этим в первый раз на Дельфи сталкиваюсь, возник ламерский вопрос - как собственно открыть графический файл (чтобы появилось окно проводника)? Буду очень рад ссылке на FAQ по этой теме. wink.gif
mamont001
Ставиш компонент OpenPictureDialog и лезеш в help
Vinchkovsky
Почти со всем разобрался, спасибо за помощь.
Возникла следующая проблема:
загружаю графический файл, он появляется на экране, после нажатия кнопки с кодом:
  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
Цитата
Почему? Как с этим справится?
Почему? Потому, что под 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-
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
Цитата
Хотя не совсем понятно,почему локальная переменная имеет желаемое действие в отличии от глобальной
Рассказываю: То, что использовал ты - это НЕ глобальная переменная, а property (свойство) класса TForm, которое как раз и отвечает за то, что изменяет цвет формы (даже если у тебя и описана где-то глобальная переменная с тем же именем, преимущество здесь будет иметь именно property, и именно с ним осуществляется работа). Как ты думаешь, что будет, если задать этому свойству какой-то цвет? А ничего, кроме того, что должно быть: цвет формы изменится. Что ты и наблюдал. А локальная переменная избавляет тебя от подобного поведения...

А чтобы открывать Jpeg файлы, надо подключить модуль Jpeg в Uses...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.