Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

работа с 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 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-1108834138
Sirruf
2005-02-19 20:28
2005.03.27
Форматирование текста в TColumn


9-1103994753
Zeqfreed
2004-12-25 20:12
2005.03.27
png...


3-1109685243
grav
2005-03-01 16:54
2005.03.27
Сортировка записей типа список в Word


8-1102771240
paule
2004-12-11 16:20
2005.03.27
Изменение курсора мыши.


3-1109110179
F[a]C
2005-02-23 01:09
2005.03.27
Как в DBGrid в заголовки колонок вывести текст в нескольно строк?