![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Есть TPngImage с загруженным в него изображением. Необходимо в нем же нарисовать это изображение с заданным уровнем альфы (полупрозрачности). Можно и через временный TPNGImage (да хотя бы через TBitmap). 
		
	
		
		
		
		
		
	
		
		
	
	
	С непрозрачными изображениями все просто: меняем это значение через AlphaScanline. Код: 
	procedure SetTransparent(alpha:byte);
var png:TPNGImage;
    x,y:integer;
    d:integer;
    DstAlpha:pByteArray;
begin
  png:=TPNGImage.CreateBlank(COLOR_RGB,8,10,10);
  png.LoadFromFile('somefile.png');
  for y:=0 to png.Height-1 do begin
    DstAlpha:=png.AlphaScanline[y];
    for x:=0 to png.Width-1 do begin
      if DstAlpha[x]<>0 then begin
        d:=DstAlpha[x]-alpha;
        if d<=0 then DstAlpha[x]:=0
          else DstAlpha[x]:=DstAlpha[x]-d;
      end;
    end;
  end;
// Ну и прорисовка его куда-нибудь через Canvas.Draw(...);
  png.Free;
end;Исходное изображение: ![]() Оно же, с полупрозрачностью 250: ![]() Оно же, с полупрозрачностью ~20: ![]() Делал вышеприведенной функцией. Как можно заметить, изображение состоит из 2х слоев, значение полупрозрачности у которых прямо противоположное (при 255 - медведы видны, а лучи - нет; при меньшем значении лучи прорисовываются, а медведы наоборот - исчезают). Подскажите, плз, как правильно задавать значение полупрозрачности для подобных изображений.  |