⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm_palette.asm

📁 图像处理
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;ASM_Palette.asm  by Robert Rayment  7/11/01

;VB

; Assumes MCode Structure set
; MCode Structure
; Public Type MCodeStruc
;   PICW As Long
;   PICH As Long
;   PtrPalBGR As Long
;   PtrPalLineCopy As Long
;   Increment As Long
;   QBLongColor As Long
;   OpCode As Long
; End Type
; Public MCODE As MCodeStruc
;
; ptrStruc = VarPtr(MCODE.PICW)
; ptMC = VarPtr mcode byte array

; Palette Effects
; OpCode& = 0    'Redder
; OpCode& = 1    'LessRed
; OpCode& = 2    'Greener
; OpCode& = 3    'LessGreen
; OpCode& = 4    'Bluer
; OpCode& = 5    'LessBlue
; OpCode& = 6    'Brighter
; OpCode& = 7    'Darker
; OpCode& = 8    'RotateColorsPlus
; OpCode& = 9    'RotateColorsMinus
; OpCode& = 10   'AddNoise
; OpCode& = 11   'Invert
; OpCode& = 12   'Grey
; OpCode& = 13   'Blacken < 24
; OpCode& = 14   'Whiten  > 248
; OpCode& = 15   'Black2White
; OpCode& = 16   'White2Black
; OpCode& = 17   'NonWhite2Black
; OpCode& = 18   'NonBlack2White
; OpCode& = 19   'BlackAndWhite
;
; Rand = 255 * Rnd
;   
; res = CallWindowProc(ptMC, ptrStruc, Rand, 3&, 4&)
;                      [ebp +  8        12   16  20 ]
; End Sub


%macro movab 2		; name & num of parameters
  push dword %2		; 2nd param
  pop dword %1		; 1st param
%endmacro			; use  movab %1,%2
; Allows eg	movab bmW,[ebx+4]

%define PICW            [ebp-4]		; PICW Mod 4
%define PICH            [ebp-8]		; PICH
%define PtrPalBGR       [ebp-12]	; PTR to PalBGR(1,1,1,N)
%define PtrPalLineCopy  [ebp-16]	; PTR to PalLineCopy(4,1)
%define Increment       [ebp-20] 	; 1,2,4,8
%define QBLongColor     [ebp-24]    ; RGB(QBRed, QBGreen, QBBlue)	
%define OpCode          [ebp-28]    ; 0,1,2,, etc

%define PalSize    [ebp-32]
%define LineBytes  [ebp-36]
%define Seed	   [ebp-40] ; from Rand
; For MMX
%define lo32 [ebp-44]
%define hi32 [ebp-48]


[bits 32]

	push ebp
	mov ebp,esp
	sub esp,76
	push edi
	push esi
	push ebx

	; Copy structure
	mov ebx,[ebp+8]
	
	movab PICW,          [ebx]
	movab PICH,          [ebx+4]
	movab PtrPalBGR,     [ebx+8]
	movab PtrPalLineCopy,[ebx+12]
	movab Increment,     [ebx+16]
	movab QBLongColor,   [ebx+20]
	movab OpCode,        [ebx+24]
	
	mov eax,[ebp+12]
	mov Seed,eax
	
	mov eax,PICH
	mov ebx,PICW
	mul ebx
	mov PalSize,eax		; In 4 byte chunks
	
	mov eax,PICW
	shl eax,2			; x4
	mov LineBytes,eax
	
	
	mov eax,OpCode
	cmp eax,0
	jne Test1
	Call near Redder
	jmp near GETOUT
Test1:
	cmp eax,1
	jne Test2
	Call near LessRed
	jmp near GETOUT
Test2:
	cmp eax,2
	jne Test3
	Call near Greener
	jmp near GETOUT
Test3:
	cmp eax,3
	jne Test4
	Call near LessGreen
	jmp near GETOUT
Test4:
	cmp eax,4
	jne Test5
	Call near Bluer
	jmp near GETOUT
Test5:
	cmp eax,5
	jne Test6
	Call near LessBlue
	jmp near GETOUT
Test6:
	cmp eax,6
	jne Test7
	Call near Brighter
Test7:
	cmp eax,7
	jne Test8
	Call Darker
Test8:
	cmp eax,8
	jne Test9
	Call near RotateColorsPlus
	jmp GETOUT
Test9:
	cmp eax,9
	jne Test10
	Call near RotateColorsMinus
	jmp GETOUT
Test10:	
	cmp eax,10
	jne Test11
	Call near AddNoise
	jmp GETOUT
Test11:
	cmp eax,11
	jne Test12
	Call near Invert
	jmp GETOUT
Test12:
	cmp eax,12
	jne Test13
	Call near Grey
	jmp GETOUT
Test13:
	cmp eax,13
	jne Test14
	Call near Blacken
	jmp GETOUT
Test14:
	cmp eax,14
	jne Test15
	Call near Whiten
	jmp GETOUT
Test15:
	cmp eax,15
	jne Test16
	Call near Black2White
	jmp GETOUT
Test16:
	cmp eax,16
	jne Test17
	Call near White2Black
	jmp GETOUT
Test17:
	cmp eax,17
	jne Test18
	Call near NonWhite2Black
	jmp GETOUT
Test18:
	cmp eax,18
	jne Test19
	Call near NonBlack2White
	jmp GETOUT
Test19:
	cmp eax,19
	jne Test20
	Call near BlackAndWhite
	jmp GETOUT
Test20:



GETOUT:
	pop ebx
	pop esi
	pop edi
	mov esp,ebp
	pop ebp
	ret 16

;############################################################
;============================================================

Redder:		; 0
	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,16			;00 In 00 00
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L0:
	movq mm1,[esi]
	paddusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L0
	emms
RET
;============================================================
LessRed:		; 1

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,16			;00 In 00 00
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L1:
	movq mm1,[esi]
	psubusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L1
	emms
	
RET
;============================================================
Greener:		; 2

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L2:
	movq mm1,[esi]
	paddusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L2
	emms
	
RET
;============================================================
LessGreen:		; 3

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L3:
	movq mm1,[esi]
	psubusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L3
	emms

RET
;============================================================
Bluer:		; 4

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	          			;00 00 0 In
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L4:
	movq mm1,[esi]
	paddusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L4
	emms

RET
;============================================================
LessBlue:		; 5

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	          			;00 00 00 In
	                    ;A  R  G  B
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L5:
	movq mm1,[esi]
	psubusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L5
	emms

RET
;============================================================
Brighter:	; 6

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov aL,Increment
	shl eax,8			;00 In In 00
	                    ;A  R  G  B
	mov aL,Increment	;00 In In In
	                    ;A  R  G  B
	
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L6:
	movq mm1,[esi]
	paddusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L6
	emms
RET

;============================================================
Darker:	; 7

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov aL,Increment
	shl eax,8			;00 In In 00
	                    ;A  R  G  B
	mov aL,Increment	;00 In In In
	                    ;A  R  G  B
	
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L7:
	movq mm1,[esi]
	psubusb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L7
	emms
RET
;============================================================

RotateColorsPlus:	; 8

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov aL,Increment
	shl eax,8			;00 In In 00
	                    ;A  R  G  B
	mov aL,Increment	;00 In In In
	                    ;A  R  G  B
	
	mov lo32,eax
	mov hi32,eax
	movq mm0,hi32
	
	mov ecx,PalSize
	shr ecx,1			; Num 8 byte chunks
	mov ebx,8
L8:
	movq mm1,[esi]
	paddb mm1,mm0
	movq [esi],mm1
	add esi,ebx
	dec ecx
	jnz L8
	emms
RET
;============================================================
RotateColorsMinus:	; 9

	mov esi,PtrPalBGR   ; pts to PalBGR(1,1,1,1)
	mov eax,PalSize
	shl eax,2			; x4
	add esi,eax			; pts to PalBGR(1,1,1,2) Blue

	xor eax,eax
	mov eax,Increment
	shl eax,8			;00 00 In 00
	                    ;A  R  G  B
	mov aL,Increment
	shl eax,8			;00 In In 00
	                    ;A  R  G  B

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -