Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с изображением [D7, XP]


v_a_belousov ©   (2011-01-02 21:17:00) 

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


antonn   (2011-01-09 14:44:00) [1]


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

не здесь


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

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

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


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

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

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

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


Curse   (2011-01-05 15:35:00) [3]

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


antonn   (2011-01-03 23:45:00) [4]

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


Curse   (2011-01-02 23:40:00) [5]

mahab-22

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


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


> mahab-22

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


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

Есть пара способов
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:16:00) [8]


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

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


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


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

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

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


Palladin   (2011-01-02 21:44:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо