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

📄 vram.inc

📁 bmf汉字预览显示
💻 INC
字号:
{$IFNDEF vram}
{$DEFINE vram}
{$I RECT.INC}
{$IFDEF clipping}
 {$I CLIP.INC}
{$ENDIF}
const
  {methods of pasting}
  mtNone            =-1;
  mtMovsd           =-2;
  mtTransparent     =-3; {color 0 is transparent}
  mtFlipX           =-4;
  mtFlipXTransparent=-5; {color 0 is transparent}
  mtPalette         =256;
  {0..255 => semitransparency (0..transparent, 255..opaque)}
  {otherwise - pointer to appropriate palette array}

procedure moveTransparent(var src;var dest;bytes:dword); assembler;
asm
  mov  ecx,bytes
  jecxz @end
  mov  edi,dest
  mov  esi,src
  shr  ecx,1
  shr  ecx,1
  jecxz @1_
  mov  edx,0FFh
@1:
  push ecx
  lodsd
  mov  ebx,[edi]
  push edi
  mov  ecx,4
@1a:
  mov  edi,eax
  and  edi,edx
  jnz  @1b
  mov  edi,ebx
  and  edi,edx
  or   eax,edi
@1b:
  rol  edx,8
  loop @1a
  pop  edi
  stosd
  pop  ecx
  loop @1
@1_:
  xchg ecx,eax
  mov  ecx,3
  and  ecx,bytes
  jecxz @end
@2:
  lodsb
  or   eax,eax
  jz   @3
  mov  [edi],al
@3:
  inc  edi
  loop @2
@end:
end;  {moveTransparent}

procedure moveHalftransparent(var src;var dest;bytes:dword); assembler;
asm
  mov  esi,src
  mov  ecx,dest
  jecxz @end
  mov  edi,ecx
  mov  ecx,bytes
  jecxz @end
  xor  eax,eax
  xor  ebx,ebx
@1:
  mov  bl,[esi]
  lodsb
  add  eax,ebx
  shr  eax,1
  stosb
  loop @1
@end:
end;  {moveHalftransparent}

procedure moveSemitransparent(var src;var dest;bytes,transparency:dword); assembler;
asm
  mov  esi,src
  mov  ecx,dest
  jecxz @end
  mov  edi,ecx
  mov  ecx,bytes
  jecxz @end
  mov  edx,transparency
  mov  dh,dl
  not  dl
  xor  eax,eax
@1:
  mov  al,[edi]
  mul  dl
  mov  ebx,eax
  lodsb
  mul  dh
  add  eax,ebx
  mov  al,ah
  stosb
  loop @1
@end:
end;  {moveSemitransparent}

procedure moveFlipX(var src;var dest;bytes:dword); assembler;
asm
  mov  esi,src
  mov  edi,dest
  or   edi,edi
  jz   @end
  mov  ecx,bytes
  jecxz @end
  mov  ebx,4
  mov  edx,ecx
  add  esi,ecx
  sub  esi,ebx
  shr  ecx,1
  shr  ecx,1
  jecxz @2
@1:
  mov  eax,[esi]
  sub  esi,ebx
  xchg ah,al
  rol  eax,16
  xchg ah,al
  stosd
  loop @1
@2:
  dec  ebx
  add  esi,ebx
  and  edx,ebx
  jz   @end
  dec  ebx
@3:
  lodsb
  sub  esi,ebx
  stosb
  dec  edx
  jnz  @3
@end:
end;  {moveFlipX}

procedure moveFlipXTransparent(var src;var dest;bytes:dword); assembler;
asm
  mov  esi,src
  mov  edi,dest
  or   edi,edi
  jz   @end
  mov  ecx,bytes
  jecxz @end
  add  esi,ecx
  dec  esi
  mov  ebx,-2
  xor  eax,eax
@1:
  lodsb
  add  esi,ebx
  or   eax,eax
  jz   @2
  stosb
  loop @1
  jmp  @end
@2:
  inc  edi
  loop @1
@end:
end;  {moveFlipXTransparent}

procedure pasteLine(s,d:pointer; size,method:longint);
var i:longint;
begin
  if (d=nil) or (size=0) or (method=mtNone) or (method=0) then exit;
  if (method=mtMovsd) or (method=mtPalette-1) then
    move(s^,d^,size)
  else if method=mtTransparent then
    moveTransparent(s^,d^,size)
  else if method=mtFlipX then
    moveFlipX(s^,d^,size)
  else if method=mtFlipXTransparent then
    moveFlipXTransparent(s^,d^,size)
  else if dword(method)<mtPalette-1 then
    moveSemitransparent(s^,d^,size,method)
  else
    for i:=1 to byte(pointer(method)^) do
      chgTo(s,d,i,byte(pointer(method+i)^),size);
end;  {pasteLine}
{$ENDIF}

⌨️ 快捷键说明

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