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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два изображения, Сложение и вычитание изображений 
:(
    Опции темы
tHE_EGOiSTE
  Дата 22.3.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем!

Мой препод сказал: вычти из одного(1) изображения другое(2) и сохрани результат в промежуточное изображение(3)(чтоб посмотреть изменения), а потом прибавь (3) к (1). Работаю с бинарным изображением. Как такое замутить ??? Не разу не сталкивался. Помогите кодом, если возможно.
Попиксельно вроде можно!? Но что вычитать и как, яркости чтоль...

Заранее спасибо!!!
PM MAIL WWW ICQ Skype   Вверх
Albinos_x
Дата 22.3.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата(tHE_EGOiSTE @  22.3.2008,  00:05 Найти цитируемый пост)
Но что вычитать и как, яркости чтоль...

можно и пиксели...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
tHE_EGOiSTE
Дата 22.3.2008, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А примерчик можно....

PM MAIL WWW ICQ Skype   Вверх
tHE_EGOiSTE
Дата 22.3.2008, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



И как выполнить сложение того 3-го изображения с исходным. Если можно пояснитe кодом. 

Заранее спасибо!!!
PM MAIL WWW ICQ Skype   Вверх
Albinos_x
Дата 22.3.2008, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



читаешь попиксельно (надеюсь с этим проблем нет) и складываешь
для того чтоб при сложении не получались только черный и потом при вычитании можно было получить исходное изоражение, берём модуль
Pic1.Canvas.Pixels[x,y]:=(Pic2.Canvas.Pixels[x,y]+Pic3.Canvas.Pixels[x,y]) mod $ffffff;

при вычитании принцып аналогичный, только необходимо учесть что может получиться отрицательное число поэтому:
Pic1.Canvas.Pixels[x,y]:=Abs(Pic2.Canvas.Pixels[x,y]-Pic3.Canvas.Pixels[x,y]);


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
tHE_EGOiSTE
Дата 22.3.2008, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Щас попробую. Спасибо
PM MAIL WWW ICQ Skype   Вверх
VICTAR
Дата 22.3.2008, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 80



Может опять изобретаю велосипед...  smile 
Код

uses Math;

function _sub(const a, b: Byte): Byte;
var
  i, lTmp: Integer;
begin
  Result := 0;
  for i := 0 to 7 do
  begin
    lTmp := 1 shl i;
    if (a and lTmp) > (b and lTmp) then
      Result := Result or (lTmp);
  end;
end;

function Subtract(aBmp1, aBmp2: TBitmap): TBitmap;
var
  i, j,
    iMax, jMax: Integer;
  lRow1,
    lRow2,
    lRowRes: PByteArray;
begin
  Result := nil;
  if (not Assigned(aBmp1)) or (not Assigned(aBmp2)) then
    Exit;
  iMax := Min(aBmp1.Width, aBmp2.Width);
  jMax := Min(aBmp1.Height, aBmp2.Height);
  Result := TBitmap.Create;
  with Result do
  begin
    PixelFormat := pf1bit;
    Width := iMax;
    Height := jMax
  end;
  for j := 0 to pred(jMax) do
  begin
    lRow1 := aBmp1.ScanLine[j];
    lRow2 := aBmp2.ScanLine[j];
    lRowRes := Result.ScanLine[j];
    for i := 0 to pred(iMax div 8) do
      lRowRes^[i] := _sub(lRow1^[i], lRow2^[i]);
  end;
end;

function Add(aBmp1, aBmp2: TBitmap): TBitmap;
var
  i, j, a,
    iMax, jMax: Integer;
  lRow1,
    lRow2,
    lRowRes: PByteArray;
begin
  Result := nil;
  if not Assigned(aBmp1) or not Assigned(aBmp2) then
    Exit;
  iMax := Min(aBmp1.Width, aBmp2.Width);
  jMax := Min(aBmp1.Height, aBmp2.Height);
  Result := TBitmap.Create;
  with Result do
  begin
    PixelFormat := pf1bit;
    Width := iMax;
    Height := jMax;
  end;
  for j := 0 to pred(jMax) do
  begin
    lRow1 := aBmp1.ScanLine[j];
    lRow2 := aBmp2.ScanLine[j];
    lRowRes := Result.ScanLine[j];
    for i := 0 to pred(iMax div 8) do
      lRowRes^[i] := lRow1^[i] or lRow2^[i];
  end;
end;

PM MAIL   Вверх
Alix
Дата 22.3.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

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



а может быть, все даже и проще и препод имел в виду работу с наложением картинок методом XOR (SRCINVERT последним параметров у BitBlt или cmSrcInvert у TCanvas.CopyMode).


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
tHE_EGOiSTE
Дата 22.3.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем спасибо. Щас испытаю всё в действии
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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