Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 23:47   #1
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию Попиксельная обработка изображения

Приветствую. Нужна подсказка по обработке изображения. Точнее. есть два файла бмп. и с ними производятся математические операции. у меня готова программка на маткаде.

там грузятся два изображения и можно производить попиксельные операции например:

fr1:=READBMP("1.bmp")
fr2:=READBMP("2.bmp")
ymax:=rows(fr1)
xmax:=cols(fr1)

A=fr1(y,x+1) + fr1(y,x) - fr2(y,x+1) - fr2(y,x)


вот.... и не подскажете в сторону чего кидать в дельфи чтобы воплотить такой же функционал. никогда изображения не обрабатывал в дельфи

Заранее спасибо )))
shushlev вне форума Ответить с цитированием
Старый 19.04.2009, 07:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

смотри TBitmap, его свойства и методы.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 19.04.2009, 08:57   #3
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

Тип TColor = -$7FFFFFFF-1..$7FFFFFFF
и каждый пиксел содержит RGB составляющие и работать надо с каждой из них по отдельности иначе эффект будет сомнительный.
Простой пример работы
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 fr1,fr2,fr3:tBitmap;
 A:tcolor;
 x,y,Red,Green,Blue:integer;
begin
 fr1:=TBitmap.Create();
 fr2:=TBitmap.Create();
 fr1.LoadFromFile('c:\1.bmp');
 fr2.LoadFromFile('c:\2.bmp');
 fr3:=TBitmap.Create();
 fr3.Width:=max(fr1.Width,fr2.Width);
 fr3.Height:=max(fr2.Height,fr2.Height);
 for x:=0 to max(fr1.Width,fr2.Width)-1 do
  for y:=0 to max(fr2.Height,fr2.Height)-1 do
    begin

     Red:=GetRValue(fr1.Canvas.Pixels[x,y])+GetRValue(fr1.Canvas.Pixels[x+1,y])-GetRValue(fr1.Canvas.Pixels[x,y]);
     Green:=GetGValue(fr1.Canvas.Pixels[x,y])+GetGValue(fr1.Canvas.Pixels[x+1,y])-GetGValue(fr1.Canvas.Pixels[x,y]);
     Blue:=GetBValue(fr1.Canvas.Pixels[x,y])+GetBValue(fr1.Canvas.Pixels[x+1,y])-GetBValue(fr1.Canvas.Pixels[x,y]);
     A:=RGB(Red div 2,Green div 2,Blue div 2);
     fr3.Canvas.Pixels[x,y]:=A;
   end;
// можо еще что нибуть подрисовать в выходном файле
   fr3.Canvas.TextOut(10,10,'Спецэффект №1');

   fr3.SaveToFile('c:\3.bmp');
end;

end.

Последний раз редактировалось CahekG; 19.04.2009 в 09:17.
CahekG вне форума Ответить с цитированием
Старый 19.04.2009, 19:02   #4
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию

ага... спасибо за наводку... буду кидать :-)
shushlev вне форума Ответить с цитированием
Старый 24.04.2009, 11:24   #5
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию

еще вопрос...

а если делать операции с рисунком без разделения на цвета как вы советовали, то это получится просто радота с якостным сигналом, как говорят у нас в ТВ...?
shushlev вне форума Ответить с цитированием
Старый 24.04.2009, 15:13   #6
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию

Значит так-с... нужны дальнейшие советы.
То что было сверху - программа в маткаде по удалению гребенки в видеосигнале. ну учебный вариант когда берутся два кадра и маткад делает третий но без гребенки.

И вот я перевел на Delphi прогурамму... вроде все стройно... Но он постоянно выкидывает недовольство по поводу разных типов данных. а по кускам работает как то непонятно....

Вот.. у вас тут свежий взгляд... может зацепится где я ошибся... опыт то программирования небольшо.

Запихнул в архивчик программу в маткаде с двумя исходными бмпшками и одним файликом с результатом работы и исходник дельфи...

Буду благодарен за критику...

Последний раз редактировалось shushlev; 24.04.2009 в 21:03.
shushlev вне форума Ответить с цитированием
Старый 24.04.2009, 19:18   #7
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию

И еще вдогонку... как преобразовать tBitmap в single или Double?
shushlev вне форума Ответить с цитированием
Старый 24.04.2009, 20:18   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

В архиве файлов не хватает... Причём самых нужных...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 24.04.2009, 21:04   #9
shushlev
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 11
По умолчанию

А так лучше?
http://narod.ru/disk/8039205000/22-2.rar.html

смог загрузить сейчас почему то тока сюда
shushlev вне форума Ответить с цитированием
Старый 26.04.2009, 13:32   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
И еще вдогонку... как преобразовать tBitmap в single или Double?
Это как? TBitmap - грубо говоря, массив пикселей...

Вот он ругается на эти строки:
Цитата:
If (ABS(A-B)/2) < (th AND C) < th2 then
...
If A < (B AND C) < th2 then
...
If (ABS(A-B)/2) < (th AND C) < th2 then
...
If A < (B AND C) < th2 then
...не знаю что такое th и th2, но надо так писать:
Цитата:
If ((ABS(A-B)/2)<(th AND C)) and ((th AND C)<th2) then
...
If (A<(B AND C)) and ((B AND C)<th2) then
...
If ((ABS(A-B)/2)<(th AND C)) and ((th AND C)<th2) then
...
If (A<(B AND C)) and ((B AND C)<th2) then
Ещё я бы не не стал писать полные пути - тогда прога будет искать и сохранять в папке с собой...
Цитата:
fr1.LoadFromFile('133.bmp');
fr2.LoadFromFile('132.bmp');
...
fr3.SaveToFile('res.bmp');
fr4.SaveToFile('res1.bmp');
fr5.savetofile('res2.bmp');
fr6.savetofile('res3.bmp');
И последняя строка "y:=y shl 1;" ничего не делает...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеозахват изображения promcontroller.ru Компьютерное железо 2 07.08.2008 17:09
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29
Вращение изображения beginner JavaScript, Ajax 5 07.07.2008 23:44
Обработка изображения Hollander Мультимедиа в Delphi 6 10.03.2008 14:21
Изображения в БД alikon1 БД в Delphi 3 08.10.2007 13:13