![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ума не приложу как это еще оптимизировать. Эта процедура выводит изображение с субпиксельным рендерингом, что дает лучшее качество картинки на LCD мониторе нежели обычный антиалиазинг. Все замечательно только вот работает не быстро. 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	type TbyteArray = array[0..1000] of byte; PbyteArray = ^TbyteArray; procedure LCD7(ABitmap, BBitmap : TBitmap); var x, y, Width, Height : Integer; A, B : PbyteArray; begin Width := ABitmap.Width div 3 - 2; Height := ABitmap.Height - 1; for y:=0 to Height do begin A := ABitmap.Scanline[Y]; B := BBitmap.Scanline[Y]; for x:=0 to Width do begin B[2] := ( A[2] + A[14] ) shr 3 + ( A[5] + A[8 ] + A[11] ) shr 2; B[1] := ( A[4] + A[16] ) shr 3 + ( A[7] + A[10] + A[13] ) shr 2; B[0] := ( A[6] + A[18] ) shr 3 + ( A[9] + A[12] + A[15] ) shr 2; A:=@A[9]; B:=@B[3]; end; end; end;  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Что-то я старею видать, новые технологии программирования мне неведомы. Объясните почему счетчик x нигде не используется? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 X  используется  
		
	
		
		
		
		
		
		
			  Он нужен для цикла. Можно было бы написать:Код: 
	B[x*3+2] := ( A[2+i] + A[14+i] ) shr 3 + ( A[5+i] + A[8+i ] + A[11+i] ) shr 2; inc(i,9); Однако быстрее работает если делать так: Код: 
	A:=@A[9]; B:=@B[3]; Последний раз редактировалось vya, 23.01.2011 в 19:45.  |