Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

работа с BMP-файлом   Найти похожие ветки 

 
Ghost_1980   (2004-12-14 00:38) [0]

Есть загруженый в Image BMP-файл. Необходимо получить цвет каждой точки и изменить ее цвет...в общем случае на любой другой. Если не сложно, то прокоментируйте все моменты процедуры.
Прошу прощения, если это все очень просто, но только начал разбираться с Делфи и возник такой вот вопрос.


 
Mihey_temporary ©   (2004-12-14 01:15) [1]

Для одиночного доступа пойдёт и:

MyColor := Image1.Picture.Bitmap.Canvas.Pixels[x,y];
Image1.Picture.Bitmap.Canvas.Pixels[x,y] := OtherColor;

Но этот способ медленный, поэтому рекомендуем:

http://www.efg2.com/Lab/ImageProcessing/Scanline.htm
http://www.delphimaster.ru/articles/pixels/index.html


 
Ghost_1980   (2004-12-14 01:23) [2]

хммм...попробую все способы рассмотреть...
да..еще такой вопрос...сохранение в файл измененного bmp-файла производить обычным диалогом сохранения?
какую информацию о bmp-файле можно узнать? не подскажите ли функции и примеры их работы?


 
Mihey_temporary ©   (2004-12-14 18:46) [3]


> хммм...попробую все способы рассмотреть...
> да..еще такой вопрос...сохранение в файл измененного bmp-файла
> производить обычным диалогом сохранения?
> какую информацию о bmp-файле можно узнать? не подскажите
> ли функции и примеры их работы?


Сохранение BMP через метод TBitmap.SaveToFile, а уж право оформлять это в диалог вы оставляете за собой.

Информвцию о BMP можно узнать разную и опять-таки, в зависимости от того, как узнавать. Если загрузить в TBitmap растр, то далее узнаём ширину, высоту, PixelFormat, палитру (если есть) обычными способами через свойства класса. Если требуется быстро узнавать только информацию о BMP и не требуется загружать его всего, то придётся напрямую считывать заголовки (это не так уж и сложно). Кроме того, можно узнать расчётную информацию, например, количество уникальных цветов.


 
Ghost_1980   (2004-12-14 19:51) [4]

У меня в программе реализовано следуещее:
...
if(OpenPictureDialog1.Execute=true) then
Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);
...
var
       MyColor:integer;
       OtherColor:integer;
       x,y:integer;
begin
       x:=10;
       y:=10;
       OtherColor:=0;
       MyColor:=Image1.Picture.Bitmap.Canvas.Pixels[x,y];
       Image1.Picture.Bitmap.Canvas.Pixels[x,y]:=OtherColor;
в MyColor -1.
рисунок небольшой, расположен по центру Image1.
Что я делаю неправильно?


 
Mihey_temporary ©   (2004-12-14 21:05) [5]

-1 - значит координаты вне изображения.


 
Ghost_1980   (2004-12-14 23:13) [6]

А можно ли узнать где начинается изображение?


 
Mihey_temporary ©   (2004-12-14 23:33) [7]


> А можно ли узнать где начинается изображение?


В смысле? Когда ты обращаешься к TImage.Picture.Bitmap, ты обращаешься к растру, который не обязательно на экране. У него нет координат. Он висит в памяти и с него TImage выводит на свою канву изображение уже в зависимости от своих координат. Т.е. независимо от Centered = True или False, TImage.Picture.Bitmap.Canvas.Pixels надо считать от начала самого изображения (а не от рамок TImage).


 
Mihey_temporary ©   (2004-12-14 23:34) [8]


> Ghost_1980   (14.12.04 19:51) [4]


Этот код работает нормально, я лично убеждался. Я проверил на маленьком битмапе 32х32.


 
Ghost_1980   (2004-12-15 00:32) [9]

т.е. что то вроде этого:
for y:=1 to Image1.Height do
for x:=1 to Image1.Width do
 begin
  MyA[y,x]:=Image1.Picture.Bitmap.Canvas.Pixels[x,y];
  Image1.Picture.Bitmap.Canvas.Pixels[x,y]:=OtherColor;
 end;
или как? где я не прав???


 
Mihey_temporary ©   (2004-12-15 01:12) [10]


> т.е. что то вроде этого:
> for y:=1 to Image1.Height do
> for x:=1 to Image1.Width do
>  begin
>   MyA[y,x]:=Image1.Picture.Bitmap.Canvas.Pixels[x,y];
>   Image1.Picture.Bitmap.Canvas.Pixels[x,y]:=OtherColor;
>  end;
> или как? где я не прав???


for y := 0 to Image1.Picture.Bitmap.Height-1 do
for x:= 0 to Image1.Picture.Bitmap.Width-1 do
begin
 MyA[x,y]:=Image1.Picture.Bitmap.Canvas.Pixels[x,y];
 Image1.Picture.Bitmap.Canvas.Pixels[x,y]:=OtherColor;
end;



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1110804922
starik30
2005-03-14 15:55
2005.03.27
Обработка нажатия клавиш ALT+ в Application.OnMessage


3-1109609595
seregka
2005-02-28 19:53
2005.03.27
Выбор СУБД


1-1110811572
tytus
2005-03-14 17:46
2005.03.27
Работа с большими файлами.


4-1108013517
miek
2005-02-10 08:31
2005.03.27
HBitmap


1-1110372935
Green_Templar
2005-03-09 15:55
2005.03.27
Самооптимизация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский