75 lines
1.8 KiB
ArmAsm
75 lines
1.8 KiB
ArmAsm
.EXPORT Pixelize16
|
|
|
|
MACRO GET_FRGB16
|
|
|
|
MOVE.W (A0),D0
|
|
MOVE.W D0,D1
|
|
ROL.W #5,D1
|
|
ANDI.W #$1F,D1 ; D1.W = Composante ROUGE
|
|
|
|
MOVE.W D0,D2
|
|
LSR.W #5,D2
|
|
ANDI.W #$3F,D2 ; D2.W = Composante VERTE (0...63)
|
|
|
|
MOVE.W D0,D3
|
|
ANDI.W #$1F,D3 ; D3.W = Composante BLEU (0...31)
|
|
|
|
ENDM
|
|
|
|
MACRO SET_FRGB16
|
|
|
|
MOVE.W D3,D0 ; D3 = Composante Bleu
|
|
LSL.W #5,D2
|
|
ADD.W D2,D0 ; D0 += Composante Verte
|
|
ROR.W #5,D1
|
|
ADD.W D1,D0 ; D0 += Composante Rouge
|
|
|
|
ENDM
|
|
|
|
*unsigned short Pixelize16(unsigned short *pt, long nb_lpts, short powerx, short powery)
|
|
*
|
|
*{
|
|
* unsigned long rsum = 0 ;
|
|
* unsigned long gsum = 0 ;
|
|
* unsigned long bsum = 0 ;
|
|
* unsigned long p2 = powerx * powery ;
|
|
* unsigned short val, pixel, *ptu ;
|
|
* unsigned short red, green, blue ;
|
|
* short x, y ;
|
|
*
|
|
* for ( y = 0; y < powery; y++ )
|
|
* {
|
|
* ptu = pt + y * nb_lpts ;
|
|
* for ( x = 0; x < powerx; x++, ptu++ )
|
|
* {
|
|
* val = *ptu ;
|
|
* red = val >> 11 ; /* Sur 5 bits */
|
|
* green = ( val >> 5 ) & 0x3F ; /* Sur 6 bits */
|
|
* blue = val & 0x1F ; /* Sur 5 bits */
|
|
* rsum += (unsigned long) red ;
|
|
* gsum += (unsigned long) green ;
|
|
* bsum += (unsigned long) blue ;
|
|
* }
|
|
* }
|
|
*
|
|
* red = (unsigned short) (rsum / p2) ;
|
|
* green = (unsigned short) (gsum / p2) ;
|
|
* blue = (unsigned short) (bsum / p2) ;
|
|
* pixel = RVB16( red, green, blue ) ;
|
|
*
|
|
* return( pixel ) ;
|
|
}
|
|
|
|
* unsigned short Pixelize16(unsigned short *pt, long nb_lpts, long power)
|
|
* D0 A0 D0 D1
|
|
Pixelize16:
|
|
MOVEM.L D0-D7/A0-A6,-(SP)
|
|
|
|
MOVE.L D0,D4
|
|
MOVE.L D1,D5
|
|
MOVE.L A0,A1
|
|
GET_FRGB16
|
|
|
|
|
|
MOVEM.L (SP)+,D0-D7/A0-A6 ; Restauration du contexte
|