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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2009, 16:42   #1
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
Вопрос Alpha Blend для Image, возможно?

Мне нужно сделать так, чтобы изображение на TImage теряло цветность (прозрачность). Можно это как нибудь осуществить?

Мои мысли: наложить друг на друга две формы. На нижней картинка, на верхней Alpha Blend= true. Но тут возникают проблемы с полным совпадением двух форм (при перемещение, и изменение размера) и главная проблема в том, что всё на верхней форме будет прозрачным.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 24.05.2009, 17:12   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Хм... Хороший вопрос... Со стандартным TImage, думаю, ничего хорошего не выйдет...

А что именно нужно-то? Выводить на форму полупрозрачное изображение?

Можно попробовать поиздеваться над "Windows.AlphaBlend;"...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 24.05.2009, 19:43   #3
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Цитата:
А что именно нужно-то? Выводить на форму полупрозрачное изображение?
Да.


Цитата:
Можно попробовать поиздеваться над "Windows.AlphaBlend;"...
А вот как издеваться?
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 24.05.2009, 20:10   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Есть процедура перетекания одного изображения в другое, можно попробовать поставить там среднее значение вместа цикла и получить наложение с 50%-й прозрачностью.
Код:
Procedure PicToPic(PicName1,PicName2,Times,Sleeper: String);
 Var
  bm, bm1, bm2: TBitMap;
  p1, p2, p: PByteArray;
  i, y, x: integer;
 Begin
  Sleep(StrToInt(Sleeper));
  bm := TBitMap.Create;
  bm1 := TBitMap.Create;
  bm2 := TBitMap.Create;
  bm1.LoadFromResourceName(HInstance,PicName1);
  bm2.LoadFromResourceName(HInstance,PicName2);
  bm.PixelFormat := pf24bit;
  bm1.PixelFormat := pf24bit;
  bm2.PixelFormat := pf24bit;
  bm.Height :=bm1.Height;
  bm.Width :=bm1.Width;
  FRMIntr.IMGIntroSplash.Canvas.Draw(0, 0, bm1);
  For i := 1 To StrToInt(Times) - 1 Do
  Begin
   For y := 0 To bm.Height - 1 Do
    Begin
      p := bm.ScanLine[y];
      p1 := bm1.ScanLine[y];
      p2 := bm2.ScanLine[y];
      For x := 0 To bm.Width * 3 - 1 Do
        p^[x] := round((p1^[x] * (StrToInt(times) - i) + p2^[x] * i) / StrToInt(times));
    End;
    FRMIntr.IMGIntroSplash.Canvas.Draw(0, 0, bm);
    Application.ProcessMessages;
    Sleep(5)
  End;
  bm1.Destroy;
  bm2.Destroy;
  bm.Destroy;
 End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.05.2009, 20:22   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Эм.....

Я говорил не об "TForm.AlphaBlend" а именно об "Windows.AlphaBlend"... Об функции из модуля "Windows"...

Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var bf: BlendFunction;
Begin
Bitmap:=TBitmap.Create;
Bitmap.PixelFormat:=pf32bit;
Bitmap.LoadFromFile('F:\Alpha_TBitmap_32bit.bmp');

bf.BlendOp:=AC_SRC_OVER;
bf.BlendFlags:=0;
bf.AlphaFormat:=AC_SRC_ALPHA; // 0 - èãíîðèðóåì èñõîäíûé àëüôà êàíàë \ AC_SRC_ALPHA - èñïîëüçóåì èñòî÷íèê alpha
bf.SourceConstantAlpha:=255;  // ïîëîâèíà îò 0xff = 50% ïðîçðà÷íîñòè \ $ff; - íåïðîçðà÷åí (îòêëþ÷àåì)   \\ ìîæíî ñòàâèòü öûôðàìè îò 0 äî 255

Windows.AlphaBlend(Form1.Canvas.Handle, 0, 0, 255, 255, Bitmap.Canvas.Handle, 0, 0, 255, 255, bf);
Bitmap.Free;
End;

P.S. Что-то при копировании из Делфи русские буквы пропадают...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 24.05.2009, 20:59   #6
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

2Alex Cones спасибо. Получилось. Даже прозрачность можно регулировать. Один минус, процедура довольно медленная и Image2 (посредник) виден секунду на форме. Как нить избавлюсь. И правая сторона изображения обрезается.

Код:
Procedure PicToPic(PicName1,PicName2,Times,Sleeper: String);
 Var
  bm, bm1, bm2: TBitMap;
  p1, p2, p: PByteArray;
  i, y, x, n: integer;
 Begin
  n:=StrToInt(Form1.edt1.Text); // уровень прозрачности 1 прозрачный
                                                      //                              100 непрозрачный
  Sleep(StrToInt(Sleeper));
  bm := TBitMap.Create;
  bm1 := TBitMap.Create;
  bm2 := TBitMap.Create;
  bm1.LoadFromFile('1.bmp');
  bm2.LoadFromFile('2.bmp');
  bm.PixelFormat := pf24bit;
  bm1.PixelFormat := pf24bit;
  bm2.PixelFormat := pf24bit;
  bm.Height :=bm1.Height;
  bm.Width :=bm1.Width;
  Form1.Image2.Canvas.Draw(0,0, bm1);


  For i := 1 To (StrToInt(Times) - 1) div n Do
  Begin
   For y := 0 To bm.Height - 1 Do
    Begin
      p := bm.ScanLine[y];
      p1 := bm1.ScanLine[y];
      p2 := bm2.ScanLine[y];
      For x := 0 To bm.Width * 3 - 1 Do
        p^[x] := round((p1^[x] * (StrToInt(times) - i) + p2^[x] * i) / StrToInt(times));
    End;

    Form1.Image2.Canvas.Draw(0,0, bm);
    Application.ProcessMessages;
    Sleep(5)
  End;
  bm1.Destroy;
  bm2.Destroy;
  bm.Destroy;
  Form1.Image1.Picture:=Form1.Image2.Picture; //заменяю болванку
                                                                        //           исходником
  Form1.Image2.Picture.Assign(nil);
 End;
2DomiNick Ща попробую
Цель, для которой требуются неправые средства, не есть неправая цель.

Последний раз редактировалось Лукманов Александр; 24.05.2009 в 21:02.
Лукманов Александр вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли использование нескольких столбцов подстановки для одного поля? jonni Microsoft Office Access 10 20.05.2009 22:25
Возможно ли сделать рабочий Transparent для Image, созданной на динамической форме2, для формы1. Лукманов Александр Мультимедиа в Delphi 3 27.04.2009 14:12
Возможно ли написать на языке Assembler модуль расширения для BIOS biff Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 07.07.2008 13:41
Прозрачность для нескольких цветов в Image SERG1980 Общие вопросы Delphi 3 11.05.2007 19:53