Главная страница
    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.044 c
1-1110553752
awk
2005-03-11 18:09
2005.03.27
TabSheet


1-1110906643
Oleg_
2005-03-15 20:10
2005.03.27
Обратное построение древа


9-1104021278
Enges
2004-12-26 03:34
2005.03.27
Простой вопрос по GLScene


6-1106572893
PURGEN
2005-01-24 16:21
2005.03.27
SMS


3-1108920324
SMT
2005-02-20 20:25
2005.03.27
SQL-запрос на создание вычисляемого поля





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский