![]() |
|
#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. |