Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.03;
Скачать: CL | DM;

Вниз

Работа с изображением   Найти похожие ветки 

 
v_a_belousov   (2011-01-02 21:17) [0]

Здравствуйте! Подскажите пожалуйста каким образом можно сделать следующее... есть изображения №1, №2, №3. Первое изображение загружается в Image и на него накладывается второе... таким образом изображение №1 получается "подложкой"... Сложность у меня возникает с изображением №3. Оно должно быть наложено на изображение №1 и №2 соответственно, но должно иметь прозрачность... то есть под изображением №3 должны быть видны изображения №1 и №2... Подскажите пожалуйста каким образом это делать?


 
Palladin ©   (2011-01-02 21:44) [1]

фотошоп это уже умеет делать


 
v_a_belousov   (2011-01-02 22:15) [2]


> фотошоп это уже умеет делать

хотел же написать "про Photoshop знаю")))...

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


 
v_a_belousov   (2011-01-02 22:16) [3]


> фотошоп это уже умеет делать

...
Мне нужно чтобы это в моей программе делалось


 
mahab-22   (2011-01-02 22:23) [4]

Есть пара способов
1)
procedure TForm1.Button1Click(Sender: TObject);
var
 BlendFunction : TBlendFunction;
begin
 BlendFunction.BlendOp     := AC_SRC_OVER;
 BlendFunction.BlendFlags  := 0;
 BlendFunction.AlphaFormat := 0;
 BlendFunction.SourceConstantAlpha := 128;
 Windows.AlphaBlend(form1.Canvas.Handle, 200,200, 200+Image1.Picture.Bitmap.Width, 200+Image1.Picture.Bitmap.Height, Image1.Picture.Bitmap.Canvas.Handle, 0, 0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height,
   BlendFunction);

end;
2)
procedure CopyTransparentBitmap(_B_in,_B_out:Tbitmap; _x,_y:integer; trColor:Tcolor; _transparent:integer);
var x, y, x_cor,y_cor,x_corS,y_corS: Integer; RowOut,RowIn: PRGBArray;
   _r,_b,_g:integer; rc1, bc1, gc1:byte;
begin

 _B_in.PixelFormat:=pf24bit; //убрать, если изначально этот формат
 _B_out.PixelFormat:=pf24bit;//убрать, если изначально этот формат
 if _x<0 then x_corS:=abs(_x) else x_corS:=0;
 if _y<0 then y_corS:=abs(_y) else y_corS:=0;
 if (_x+_B_in.Width)>_B_out.Width then x_cor:=_x+_B_in.Width-_B_out.Width else x_cor:=0;
 if (_y+_B_in.Height)>_B_out.Height then y_cor:=_y+_B_in.Height-_B_out.Height else y_cor:=0;
 rc1:=GetRValue(trColor); gc1:=GetGValue(trColor); bc1:=GetBValue(trColor);
 for y:=y_corS to _B_in.Height-1-y_cor do begin
    RowOut:= _B_out.ScanLine[y+_y];
    RowIn:= _B_in.ScanLine[y];
   for x:=x_corS to _B_in.Width-1-x_cor do
    if not((RowIn[x].rgbtRed=rc1)and(RowIn[x].rgbtGreen=gc1)and(RowIn[x].rgbtBlue=bc1))  then begin
         _r:= trunc(RowOut[x+_x].rgbtRed+(((RowIn[x].rgbtRed-RowOut[x+_x].rgbtRed)/100)*_transparent));
        if _r>255 then _r:=255; if _r<0 then _r:=0;
         _g:= trunc(RowOut[x+_x].rgbtGreen+(((RowIn[x].rgbtGreen-RowOut[x+_x].rgbtGreen)/100)*_transparent));
        if _g>255 then _g:=255; if _g<0 then _g:=0;
         _b:= trunc(RowOut[x+_x].rgbtBlue+(((RowIn[x].rgbtBlue-RowOut[x+_x].rgbtBlue)/100)*_transparent));
        if _b>255 then _b:=255; if _b<0 then _b:=0;
         RowOut[x+_x].rgbtRed:=_r;
         RowOut[x+_x].rgbtGreen:=_g;
         RowOut[x+_x].rgbtBlue:=_b;
   end;
 end
end;
Дерзай


 
v_a_belousov   (2011-01-02 22:59) [5]


> mahab-22

Спасибо большое!


 
Curse ©   (2011-01-02 23:40) [6]

mahab-22

Копирайты не забываем. Это код antonn


 
antonn ©   (2011-01-03 23:45) [7]

я знаменит! =)))
но больше похоже на укор, так жутко отформатировать код с этими нижними пробелами... :(


 
Curse ©   (2011-01-05 15:35) [8]

antonn ©   (03.01.11 23:45) [7]
Я вот этот ваш код юзал лет пять назад (в некоммерческим проекте :) ), поэтому и вспомнил


 
Студент   (2011-01-09 06:08) [9]

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

_B_in.PixelFormat:=pf24bit; //убрать, если изначально этот формат
_B_out.PixelFormat:=pf24bit;//убрать, если изначально этот формат


Так нехорошо делать.....

RowOut[x+_x]......

Хм... А "x+_x" соптимизируется? Или так и будет складываться каждый раз?

И кстати где же MMX?))


 
antonn ©   (2011-01-09 14:44) [10]


> И кстати где же MMX?))

не здесь



Страницы: 1 вся ветка

Текущий архив: 2011.04.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1292621393
Юрий
2010-12-18 00:29
2011.04.03
С днем рождения ! 18 декабря 2010 суббота


15-1292884948
Германн
2010-12-21 01:42
2011.04.03
Датчик присутствия человека


1-1251461342
dmitry_12_08_73
2009-08-28 16:09
2011.04.03
Проверка видимости контекстного меню


2-1294484497
Aleks
2011-01-08 14:01
2011.04.03
Народ подскажите я, что то не то делаю или что то глючит?


15-1292496064
iPhone Owner
2010-12-16 13:41
2011.04.03
отпала кнопка переключения громкости