Показать сообщение отдельно
  #4  
Старый 13.07.2011, 07:59
Аватар для Horsee
Horsee Horsee вне форума
Прохожий
 
Регистрация: 12.07.2011
Сообщения: 2
Репутация: 10
Радость

angvelem, спасибо за содействие, но я пытался в рамках PNG изображения.

Вот решение данной проблемы.
Код:
procedure OverlapPNG(Layer2, Layer1: TPNGObject; var blendedPNG: TPNGObject);
var
  x, y: Integer;
  SL1, SL2, SLBlended: pRGBLine;
  aSL1, aSL2, aSLBlended: PByteArray;
  blendCoeff: single;
begin
  blendedPNG.Assign(Layer1);
  for y := 0 to Layer1.Height-1 do
  begin
    SL1 := Layer1.Scanline[y];
    SL2 := Layer2.Scanline[y];
    aSL1 := Layer1.AlphaScanline[y];
    aSL2 := Layer2.AlphaScanline[y];
    SLBlended := blendedPNG.Scanline[y];
    aSLBlended := blendedPNG.AlphaScanline[y];
    for x := 0 to Layer1.Width-1 do
    begin
      blendCoeff:=aSL1[x] * 100/255/100;
      aSLBlended[x] := round(aSL2[x] + (aSL1[x]-aSL2[x]) * blendCoeff);
      SLBlended[x].rgbtRed   := round(SL2[x].rgbtRed + (SL1[x].rgbtRed-SL2[x].rgbtRed) * blendCoeff);
      SLBlended[x].rgbtGreen := round(SL2[x].rgbtGreen + (SL1[x].rgbtGreen-SL2[x].rgbtGreen) * blendCoeff);
      SLBlended[x].rgbtBlue  := round(SL2[x].rgbtBlue + (SL1[x].rgbtBlue-SL2[x].rgbtBlue) * blendCoeff);
    end;
  end;
end;
Ответить с цитированием