Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добраться к RGB составляющим... Вопрос по TBitmap... 
:(
    Опции темы
val
Дата 7.10.2003, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Всем приветик!

Имеется:

Metafile:=TMetafile.Create;
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('c:\Temp\april.bmp');//прочитал картинку 24 бита
with MetaFile do
begin
Image1.Height:=Bitmap.Height;
Image1.Width:=Bitmap.Width;
Image2.Height:=Bitmap.Height;
Image2.Width:=Bitmap.Width;
Image1.Canvas.Draw(0,0,Bitmap); //вывел картинку в TImage
end;

А теперь хотелось бы добраться до пикселей этой картинки и немного с ними поработать
(заняться фильтрацией изображения)...
Подскажите, как можно добраться до этих самих пикселей и их RGB составляющих?
Заранее спасибо...



--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
var-alex
Дата 7.10.2003, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.10.2003
Где: Коломна, MCK

Репутация: нет
Всего: 1



У битмапа есть Canvas, у него есть свойсво pixels типа TColor. Вот через него и добирайся! Получить из Tcolor RGB можно функцией function ColorToRGB(Color: TColor): Longint; а потом оттуда функциями GetBValue, GetRValue, GetGValue получить составляющие. Но можно напрямую смотреть этот longInt и даже TColor.
PM MAIL   Вверх
val
Дата 7.10.2003, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Цитата
У битмапа есть Canvas, у него есть свойсво pixels типа TColor. Вот через него и добирайся!


Так пробовал, не получается... В это свойство можно только писать, но забирать значения пикселей не выходит... Попробуй, если у тебя получиться, брось кусок кода, как ты этого добился...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
x77
Дата 7.10.2003, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: нет
Всего: 22



Цитата
В это свойство можно только писать, но забирать значения пикселей не выходит


Код
var
 c: TColor;
begin
 ...
 c := ...Pixels [Col, Row];
 ...
end;



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
var-alex
Дата 7.10.2003, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.10.2003
Где: Коломна, MCK

Репутация: нет
Всего: 1



Не может быть!!!!
Из хельпа:

Specifies the color of the pixels within the current ClipRect.

property Pixels[X, Y: Integer]: TColor;

Description

Read Pixels to learn the color on the drawing surface at a specific pixel position within the current clipping region. If the position is outside the clipping rectangle, reading the value of Pixels returns -1.

Write Pixels to change the color of individual pixels on the drawing surface. Use Pixels for detailed effects on an image. Pixels may also be used to determine the color that should be used for the FillRect method.

Not every device context supports the Pixels property. Reading the Pixels property for such a device context will return a value of -1. Setting the Pixels property for such a device context does nothing.

Мож метафайл не поддерживает это?? Надо читать про него MSDN...
PM MAIL   Вверх
p0s0l
Дата 7.10.2003, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Я так понял, в заголовке сказано про битмап, а не про метафайл...
А причем там метафайл - видимо атавизм ?
Код
procedure TForm1.Button2Click(Sender: TObject);
var
 Bitmap : TBitmap;
 x, y : integer;
begin
 Bitmap := TBitmap.Create;
 Bitmap.LoadFromFile (<FileName>);
 Image1.Height := Bitmap.Height;
 Image1.Width  := Bitmap.Width;
 for x := 0 to Bitmap.Width-1 do
   for y := 0 to Bitmap.Height-1 do
     Image1.Canvas.Pixels[x, y] := Bitmap.Canvas.Pixels[x, y];
 Bitmap.Free;
end;


А вот код, подтверждающий, что можно и писать и читать через Pixels в TBitmap:
Код
procedure TForm1.Button2Click(Sender: TObject);
var
 Bitmap : TBitmap;
 x, y : integer;
begin
 Bitmap := TBitmap.Create;
 Bitmap.LoadFromFile (<FileName>);
 Image1.Height := Bitmap.Height;
 Image1.Width  := Bitmap.Width;
 Image1.Picture.Bitmap.Width := Bitmap.Width;
 Image1.Picture.Bitmap.Height := Bitmap.Height;
 for x := 0 to Bitmap.Width-1 do
   for y := 0 to Bitmap.Height-1 do
     Image1.Picture.Bitmap.Canvas.Pixels[x, y] := Bitmap.Canvas.Pixels[x, y];
 Bitmap.Free;
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
var-alex
Дата 7.10.2003, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.10.2003
Где: Коломна, MCK

Репутация: нет
Всего: 1



Цитата(p0s0l @ 7.10.2003, 14:55)
Я так понял, в заголовке сказано про битмап, а не про метафайл...
А причем там метафайл - видимо атавизм ?

wow.gif Написано
Цитата

with MetaFile do
begin
Image1.Height:=Bitmap.Height;
Image1.Width:=Bitmap.Width;
Image2.Height:=Bitmap.Height;
Image2.Width:=Bitmap.Width;
Image1.Canvas.Draw(0,0,Bitmap); //вывел картинку в TImage
end;


Поэтому и говорю, что метафайл. Bitmap егойный используется!
PM MAIL   Вверх
val
Дата 7.10.2003, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Всем спасибо, раздолбили мою проблему в пух и прах... smile.gif


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
December
Дата 7.10.2003, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: нет
Всего: 57



val
Если будешь глубоко с битмапами работать, обрати внимание на ScanLine. Через Pixels - очень долго.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 8.10.2003, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Цитата
Поэтому и говорю, что метафайл. Bitmap егойный используется!

var-alex, у метафайла нет никакого битмапа...

Это сообщение отредактировал(а) p0s0l - 8.10.2003, 07:12


--------------------
С уважением, г-н Посол.
PM   Вверх
val
Дата 8.10.2003, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Код

Metafile:=TMetafile.Create;
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('c:\Temp\april.bmp');//прочитал картинку 24 бита
with MetaFile do
begin
Image1.Height:=Bitmap.Height;
Image1.Width:=Bitmap


Не знаю к чему тут метафайл, но это вырезка из хелпа, так что зачем-то он тут всё-таки нужен...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
var-alex
Дата 8.10.2003, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.10.2003
Где: Коломна, MCK

Репутация: нет
Всего: 1



Ну да, а как ты по другому тут нарисуешь на метафайле битмап? Не использую Tbitmap? :-))
PM MAIL   Вверх
val
Дата 8.10.2003, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



А зачем тут метафайл? Можно и так записать:
Код

Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('c:\Temp\april.bmp');//прочитал картинку 24 бита
begin
  Image1.Height:=Bitmap.Height;
  Image1.Width:=Bitmap.Width;
  Image1.Canvas.Draw(0,0,Bitmap); //вывел картинку в TImage
end;




--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
maxim1000
Дата 9.10.2003, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



Цитата
Можно и так записать:
Код
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('c:\Temp\april.bmp');//прочитал картинку 24 бита
begin
 Image1.Height:=Bitmap.Height;
 Image1.Width:=Bitmap.Width;
 Image1.Canvas.Draw(0,0,Bitmap); //вывел картинку в TImage
end;


да
Цитата
но это вырезка из хелпа, так что зачем-то он тут всё-таки нужен...

нет smile.gif

можно вообще миновать стадию показа:
Код

var
 bmp:tbitmap;
begin
 bmp:=tbitmap.create;
 bmp.loadfromfile('qqq.bmp');
 bmp.canvas.pixels[x,y]:=0;//for example
 bmp.savetofile('qqq.bmp');
end;



--------------------
qqq
PM WWW   Вверх
val
Дата 9.10.2003, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Цитата
можно вообще миновать стадию показа:


ясный пень...

Цитата
нет


не понял?



--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
p0s0l
Дата 9.10.2003, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Цитата
не понял?

val, maxim1000 имел в виду то, что metafile там не нужен.
Чтобы не спорить попусту просто приведи для всеобщего обозрения полностью ту страницу из хелпа, где это написано. А то в том коде, что ты привел, метафайл вообще некуда прилепить...



--------------------
С уважением, г-н Посол.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.