home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / lente / BAK / IMAGEN_1.ASM < prev    next >
Encoding:
Assembly Source File  |  1996-05-29  |  7.2 KB  |  236 lines

  1. .MODEL SMALL,PASCAL
  2. .STACK 500h 
  3. .DATA
  4.         Ventana1        EQU 0A000h
  5.         NombreTGA       DB  'LENS.TGA',0
  6.         HandleTGA       DW  ?
  7.  
  8.         Ancho_Img       DW 70
  9.         Ancho_Pant      DW 320
  10.         Alto_Pant       DB 200
  11.         Area            DW 4900
  12.         Buffer_Fuente   DB 4900 DUP(?)
  13.         Buffer_Destino  DB 4900 DUP(?)
  14.         Matriz_Trans    DB 4900 DUP(0)
  15.         BufferTGA       DB 1024 DUP(?)
  16. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  17. .CODE
  18.  
  19. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  20. ; Macro para activar el modo de video 320 x 200 x 256
  21. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  22. Modo13 MACRO
  23.         mov ax,0013h    ; Modo de video 
  24.         int 10h
  25. ENDM
  26. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  27. ; Macro para desactivar el modo 13h y salir al sistema
  28. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  29. Salir MACRO
  30.         mov ax,0003h    ; Modo texto
  31.         int 10h
  32.         mov ax,4C00h    ; Funcion 4Ch: Salir al sistema
  33.         int 21h
  34. ENDM
  35. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  36. ;#####################################
  37. ; Este procedimiento carga una images
  38. ; en formato TGA 256 colores 
  39. ;#####################################
  40.  
  41. CargaTGA PROC USES ax bx cx dx ds es di si, Nombre_TGA:PTR BYTE, \
  42. Buffer:PTR BYTE
  43.  
  44. LOCAL Handle_TGA:WORD
  45.  
  46.         mov ax,3D00h            ; Funcion 3Dh: Abrir un fichero modo lectura
  47.         mov dx,offset Nombre_TGA        ; Direccion de comienzo del nombre
  48.         int 21h
  49.  
  50.         mov Handle_TGA, ax      ; Al abrir el fichero se devuelve en ax el
  51.                                 ; handle del fichero
  52.  
  53.         mov ah, 3Fh             ; Funcion 3Fh: Leer los CX elementos del 
  54.         mov bx, Handle_TGA      ; fichero y escribirlos en R
  55.         mov cx, 18
  56.         mov dx, OFFSET Buffer   ; Leemos la cabecera del fichero
  57.         int 21h
  58.  
  59.         mov ah, 3Fh             ; Funcion 3Fh: Leer los CX elementos del
  60.         mov bx, Handle_TGA      ; fichero y escribirlos en R
  61.         mov cx, 768
  62.         mov dx, OFFSET Buffer   ; Leemos la paleta de colores
  63.         int 21h
  64.  
  65.         mov cx, 256             ; Elementos de la paleta
  66.  
  67.         mov ax, @DATA           ; Preparamos los registros de segmentos                       
  68.         mov es, ax              ; y los de desplazamiento de cadena fuente
  69.         mov si, OFFSET Buffer   ; y destino para emplear las instruciones 
  70.         mov di, OFFSET Buffer   ; lods_ y stos_ que son las mas comodas
  71.         cld                     ; Borra el flag de direccion
  72.  
  73. @@ModifPal:
  74.         lodsb                   ; al <- DS:SI y INC si
  75.         shr al, 1               ; dividimos el valor entre cuatro 
  76.         shr al, 1               ; tenemos la nueva componente AZUL
  77.         mov ah, al              ; situamos el nuevo valor en AH
  78.         lodsb                   ; al <- DS:SI y INC si
  79.         shr al, 1               ; dividimos el valor entre cuatro
  80.         shr al, 1               ; tenemos la nueva componente VERDE
  81.         mov bh, al              ; situamos el nuevo valor en BH
  82.         lodsb                   ; al <- DS:SI y INC si
  83.         shr al, 1               ; dividimos el valor entre cuatro
  84.         shr al, 1               ; tenemos la nueva componente ROJA
  85.         stosb                   ; ES:DI <- al y INC di , almacenamos el ROJO
  86.         mov al, bh              ; 
  87.         stosb                   ; ES:DI <- al y INC di , almacenamos el VERDE
  88.         mov al, ah       
  89.         stosb                   ; ES:DI <- al y INC di , almacenamos el AZUL
  90.         dec cx                  ; un color menos de la Paleta
  91.         jnz @@ModifPal          ; repetir hasta cero
  92.  
  93.         mov ax, 1012h           ; Funcion 10h subfuncion 12h establecer la
  94.         mov bx, 0               ; paleta de colores situada en ES:DX
  95.         mov cx, 256             ; numero de colores
  96.         mov dx, OFFSET Buffer
  97.         int 10h 
  98.  
  99.         mov ah, 3Fh             ; Leer del fichero toda la imagen que esta
  100.         mov bx, Handle_TGA      ; sin comprimir y situarla en la Ventana1
  101.         mov cx, 64000           ; tamaño de la imagen
  102.         mov dx, Ventana1
  103.         mov ds, dx
  104.         mov dx, 0
  105.         int 21h
  106.  
  107.         mov ah, 3Eh             ; Funcion 3Eh: Cerrar un fichero 
  108.         mov bx, Handle_TGA
  109.         int 21h
  110.         ret
  111. CargaTGA ENDP
  112.  
  113. ;############################################################################
  114. ; Procedimiento que toma un trozo de la imagen y la guarda en un buffer
  115. ;############################################################################
  116. CargarBuffer PROC USES ax cx si di ds es , Pos_X :BYTE, Pos_Y:BYTE, \
  117. Dest :PTR BYTE
  118. LOCAL Ancho_I:WORD, Ancho_P:WORD
  119.         mov ax, Ancho_Pant
  120.         mov Ancho_P,ax
  121.         mov ax, Ancho_Img
  122.         mov Ancho_I,ax
  123.         push ds
  124.         pop es
  125.         mov ax, Ventana1
  126.         mov ds, ax
  127.         mov si, Pos_Y
  128.         mov ax, Ancho_P
  129.         mul si  
  130.         mov si, ax
  131.         add si, Pos_X
  132.         mov di, OFFSET Dest
  133.         mov cx, Ancho_I
  134. @@CopiaFila:
  135.         push si
  136.         push cx
  137.         mov cx, Ancho_I
  138.         cld
  139.         rep movsb
  140.         pop cx
  141.         pop si
  142.         add si, Ancho_P
  143.         dec cx
  144.         jnz @@CopiaFila
  145.         ret
  146. CargarBuffer ENDP
  147.  
  148. ;############################################################################
  149. ; Procedimiento que toma un buffer y lo muestra en pantalla
  150. ;############################################################################
  151. MostrarBuffer PROC USES ax cx si di ds es , Pos_X :BYTE, Pos_Y:BYTE, \
  152. Dest :PTR BYTE
  153. LOCAL Ancho_I:WORD, Ancho_P:WORD
  154.         mov ax, Ancho_Pant
  155.         mov Ancho_P,ax
  156.         mov ax, Ancho_Img
  157.         mov Ancho_I,ax
  158.  
  159.         mov ax, Ventana1
  160.         mov es, ax
  161.         mov di, Pos_Y
  162.         mov ax, Ancho_P
  163.         mul di
  164.         mov di, ax
  165.         add di, Pos_X
  166.         mov si, OFFSET Dest
  167.         mov cx, Ancho_I
  168. @@CopiaFila:
  169.         push di
  170.         push cx
  171.         mov cx, Ancho_I
  172.         cld
  173.         rep movsb
  174.         pop cx
  175.         pop di
  176.         add di, Ancho_P
  177.         dec cx
  178.         jnz @@CopiaFila
  179.         ret
  180. MostrarBuffer ENDP
  181.  
  182. ;############################################################################
  183. ; Procedimiento que transforma un trozo de imagen de un buffer
  184. ;############################################################################
  185. TransfBuffer PROC
  186.         mov dx, ds
  187.         mov es, dx
  188.         mov si, OFFSET Matriz_Trans
  189.         mov di, OFFSET Buffer_Destino
  190.         mov cx, Area
  191.         cld
  192.         xor bh,bh
  193. @@HazPunto:
  194.         lodsw
  195.         mov bx,ax
  196.         mov al,OFFSET [Buffer_Fuente+bx]
  197.         stosb
  198.         inc dx
  199.         dec cx
  200.         jnz @@HazPunto
  201.  
  202.         ret
  203. TransfBuffer ENDP
  204.  
  205. Codigo PROC
  206.         mov ax,@data
  207.         mov ds,ax
  208.  
  209.         Modo13
  210.         mov dx, OFFSET NombreTGA
  211.         push dx
  212.         mov dx, OFFSET BufferTGA
  213.         push dx
  214.         call CargaTGA
  215.  
  216.         mov ax, 35
  217.         push ax
  218.         push ax
  219.         mov dx, OFFSET Buffer_Destino
  220.         push dx
  221.         call CargarBuffer
  222.  
  223.         mov ax,120
  224.         push ax
  225.         push ax
  226.         mov dx, OFFSET Buffer_Destino
  227.         push dx
  228.         call MostrarBuffer
  229.  
  230.         mov ah, 01h
  231.         int 21h
  232.         Salir
  233. Codigo ENDP
  234.  
  235.         END Codigo
  236.