Red de conocimiento informático - Aprendizaje de código fuente - Problemas con la imagen en el cuadro de imagen de Easy Language

Problemas con la imagen en el cuadro de imagen de Easy Language

Según el tamaño del marco de la imagen, tome la imagen de la imagen local. El siguiente código está tomado del código fuente de un maestro en Easy Language Forum, solo como referencia.

La siguiente imagen está tomada del código local.versión 2

. La subrutina image_fetch_local, conjunto de bytes, pública, solo se puede comprimir a 0 y es un mapa de bits de más de 8 bits.

.Parámetro mapa de bits original, conjunto de bytes

. Los parámetros toman el lado izquierdo de la imagen, un número entero

. Los parámetros toman el borde superior, un número entero

. El parámetro toma ancho, número entero

. Obtener parámetro de altura, número entero

. Ancho de imagen variable local, número entero

. Altura de imagen variable local, número entero

. Bits de imagen de variable local, número entero

. Compresión de imagen variable local, número entero

. Nuevo mapa de bits de variable local, conjunto de bytes

. Nuevo encabezado de información de mapa de bits de variable local, BITMAPINFOHEADER

. Encabezado de archivo de mapa de bits nuevo de variable local, header_info_

Longitud del archivo de variable local, entero

. Variable local i, número entero

. Desplazamiento del punto de color de la variable local, número entero

. Tamaño de punto de la variable local, número entero

. Tabla de colores de variables locales, conjunto de bytes

. Compensación total de datos de la variable local, número entero

. Ancho de nueva línea de variable local, número entero

. Ancho de línea original de variable local, número entero

. Tiempo de variable local, entero

Ancho de imagen = obtener datos del conjunto de bytes (obtener entre conjuntos de bytes (mapa de bits original, 19, 4), #entero,)

Alto de la imagen = obtener conjunto de bytes datos(conjunto de bytes obtener entre (mapa de bits original, 23, 4), #entero,)

bits de imagen = obtener conjunto de bytes obtener entre(palabra Obtener entre conjuntos de secciones (mapa de bits original, 29, 2), # entero corto,)

Bits de imagen = obtener los datos entre conjuntos de bytes (obtener los datos entre conjuntos de bytes (mapa de bits original, 29, 2), #Entero corto,) #Entero corto,)

Compresión de imagen = obtener datos del conjunto de bytes (obtener intervalo del conjunto de bytes (mapa de bits original, 31, 4), #entero,)

. Si es verdadero (compresión de imagen ≠ 0)

Devuelve ({? })

Si es verdadero, finaliza

. Si es verdadero (bits de imagen = 32)

Desplazamiento del punto de color = 54

Tamaño del punto = 4

. Si es verdadero, finalice

. Si es verdadero (bits de imagen = 24)

Desplazamiento del punto de color = 54

Tamaño del punto = 3

. Si es verdadero, finalice

. Si es verdadero (bits de imagen = 16)

Desplazamiento del punto de color = 54

Tamaño del punto = 2

. Si es verdadero, finalice

. Si es verdadero (bits de imagen = 8)

Desplazamiento del punto de color = 1078

Tamaño del punto = 1

Tabla de colores = Obtener intervalo de conjunto de bytes (mapa de bits original, 55 , 1024)

. Si es verdadero, finalice

. Si es verdadero (profundidad de bits de la imagen < 8)

Texto de depuración de salida ("¡Error! ¡La profundidad de bits de la imagen es menor que 8!")

Devuelve ({? })

.Si es verdadero, finalice

.

Si es verdadero (quita el lado izquierdo de la imagen + quita el ancho > ancho de la imagen o quita el borde superior de la imagen + quita la altura > altura de la imagen o quita el lado izquierdo de la imagen < 0 o quita el borde superior de la imagen < 0 o quitar el ancho ≤ 0 o quitar el alto ≤ 0)

Texto de depuración de salida ("¡Error de parámetro! ¡Compruebe los parámetros de entrada!")

Retorno ({? })

.End if true

Ancho de línea original = Desplazamiento a la izquierda (Desplazamiento a la derecha (Ancho de imagen × Bits de imagen + 31, 5), 2)

Ancho de nueva línea = Desplazamiento a la izquierda (Desplazamiento a la derecha (Ancho de búsqueda × Bits de imagen + 31, 5), 2)

Longitud del archivo = ancho de nueva línea × altura extraída

Nuevo mapa de bits = conjunto de bytes en blanco extraído (longitud del archivo + 54 + longitud del conjunto de bytes extraídos (tabla de colores))

Nuevo encabezado del archivo de mapa de bits. Tipo de archivo = 19778

Nuevo encabezado de archivo de mapa de bits. offset = desplazamiento del punto de color

Nuevo encabezado de archivo de mapa de bits. Tamaño del resultado = Desplazamiento de puntos de color + Longitud del archivo

Copiar encabezado de mapa de bits Memory_Copy en ByteSet (nuevo mapa de bits[1], nuevo encabezado de mapa de bits, 14)

Nuevo encabezado de mapa de bits.biSize = 40

Nuevo Bitmap Header.biWidth = Obtener el ancho

Nuevo Bitmap Header.biHeight = Obtener la altura

Nuevo Bitmap Header = 1

Nuevo encabezado de mapa de bits.biBitCount = Recuento de bits de imagen

Copiar memoria_Copiar encabezado de mapa de bits a Byteset (Nuevo mapa de bits [15], Nuevo encabezado de mapa de bits, 40)

. Si es verdadero (bits de imagen = 8)

Copia el conjunto de bytes de memoria al conjunto de bytes (nuevo mapa de bits [55], mapa de colores [1], 1024)

. Si es verdadero final

Desplazamiento total de datos = ancho de línea original × (alto de la imagen - altura de búsqueda - borde superior de la imagen) + desplazamiento de imagen hacia la izquierda × tamaño de punto? Desplazamiento total = desplazamiento de altura + desplazamiento de ancho Cantidad de desplazamiento

.

Primero cuente el bucle (obtener altura, i)

Copie el conjunto de bytes de memoria al conjunto de bytes (nuevo mapa de bits [(i - 1) × nuevo ancho de línea + desplazamiento del punto de color + 1], mapa de bits original [desplazamiento del punto de color + total desplazamiento de datos + (i - 1) × ancho de fila original + 1], nuevo ancho de fila)

Evento de procesamiento ()

.Fin del bucle de conteo ()

Retorno (nuevo mapa de bits)

La siguiente estructura de tipo de datos Versión 2

Tipo de datos BITMAPINFOHEADER

.Miembro biSize, entero

. Miembro biWidth, entero

. Miembro biHeight, entero

Miembro biMAPINFOHEADER

Miembro biHeight, entero

. entero corto

miembro biPlanes, entero corto

biBitCount, entero corto

miembro biBitCount, entero corto

. entero

. Miembro biCompression, entero

. biSizeImage, entero corto. Miembro biSizeImage, entero

. Miembro biXPelsPerMeter, entero

. biYPelsPerMeter, número entero

. Miembro biYPelsPerMeter, entero

. biClrUsed, miembro biClrUsed, entero

. Miembro biClrUsed, entero

. biClrImportant, miembro biClrImportant, entero

. Miembro biClrImportant, entero

. Versión 2

. Tipo de datos Información del encabezado del archivo_

.Member FileType, entero corto, , , bfType

.Member ResultSize, entero, , , bfSize

. Los miembros Reserved1, short integer, , , bfReserved1 están reservados y deben establecerse en 0

. Los miembros Reserved2, short integer, , , bfReserved2 están reservados y deben establecerse en 0

. Miembros Offset, , , bfOffBits El desplazamiento (en bytes) entre la posición inicial del encabezado del archivo y los datos de la imagen real

Llame a la siguiente función API. Versión 2

.Comando DLL CopyMemory_Copiar encabezado de archivo de mapa de bits al conjunto de bytes, , , "RtlMoveMemory"

Parámetros Destino, tipo de byte, dirección de transferencia

. Parámetro src, información del encabezado_

. Comando DLL CopyMemory_CopyBitmapInfoHeader_To_Byteset, , , "RtlMoveMemory"

Parámetros Destino, byte, dirección de transferencia

. Parámetros Src, BITMAPINFOHEADER

. Parámetro len, entero

.Comando DLL CopyMemory_Byteset a Byteset, , , "RtlMoveMemory"

Parámetro Dest, tipo de byte, dirección de transferencia

. byte, dirección

. Parámetro len, número entero

.