Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1251447036
znayu
2009-08-28 12:10
2011.04.03
ESC коды управления матричным принтером


15-1291820463
Артём
2010-12-08 18:01
2011.04.03
Нужна работа...


6-1235830494
AlkonaVT
2009-02-28 17:14
2011.04.03
Глюк кодировки FTPServer а в FPiette.


2-1294380604
mefodiy
2011-01-07 09:10
2011.04.03
Разница в представлении данных MySQL.User в D7 и D2010


15-1292794192
Юрий
2010-12-20 00:29
2011.04.03
С днем рождения ! 20 декабря 2010 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский