Форум: "Начинающим";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];
ВнизРабота с изображением Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c