Форум: "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.039 c