Estoy tratando de crear una imagen redimensionada desde un mapa de bits, establecer un nuevo alto/ancho y una nueva resolución y guardarla en PNG. Puedo hacer esto ya sea directamente desde A) Image.FromFile(filename)
o B) New Bitmap(imageSource)
para crear el la A Bitmap ser pasado a B. Ambos trabajan bien schmokay, pero Un no permite que fije una nueva anchura/altura en la creación (pero no me permite preservar los valores con useIcm=True
) y B no me permite preseve valores.Preservar los valores de mapa de bits al crear un nuevo mapa de bits desde System.Drawing.Image
bien, de ahora en cierto código y ejemplos:
Dim sourceBitmap As New Bitmap(imagePath & myImage1Name)
< -no bueno en absoluto (# 1 sobrecarga). No conserva cosas comoHorizontalResolution
oPixelFormat
en.Save
Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True)
< -no buena (# 5 sobrecarga). se hace preservar cosas comoHorizontalResolution
oPixelFormat
en.Save
, pero no se me permite inicializar la imagen a un nuevo tamaño.Dim targetBitmap As New Bitmap(sourceBitmap2, newWidth, newHeight)
< -no está bien. A pesar de quesourceBitmap2
(ver # 2 arriba) fue inicializado conuseIcm=True
, que no importa, una vez que he pasado en como la fuente detargetBitmap
.
Básicamente, estoy buscando una manera de contruct un nuevo mapa de bits tanto con algo así como useIcm=True
y establecer el ancho/altura al mismo tiempo (Width
/Height
son propiedades de sólo lectura una vez que se ha creado) .
He pasado por la ruta Graphics.DrawImage
también y es la misma - Graphics.FromImage(sourceBitmap)
no conserva los valores.
¿Por qué necesito que se conserven estos valores? Porque necesito convertir estas imágenes a PNG (para el tamaño del archivo) con una nueva resolución y mantener las mismas dimensiones físicas (p/h en pulgadas) para imprimir. Conozco el nuevo ancho/alto de píxel necesario en función de los valores de resolución que voy a pasar con .SetResolution(xDpi,yDpi)
para preservar las dimensiones físicas, por lo que ese no es el problema. El problema es que las cosas como la PixelFormatSize
necesitan permanecer sin cambios (sí, lo intenté EncoderParameters
- no funcionan. Puedo darte los detalles sangrientos si quieres, pero basta decir que por ahora, simplemente no lo hacen trabajo).
¡Vaya, me quité eso de encima! De acuerdo, ¿alguien que realmente sepa cómo funciona todo esto puede ayudar?
EDIT: Tipos de archivos necesarios para convertir a PNG: BMP, TIF, GIF, WMF, EMF.
Reflector puede ser tu amigo aquí. Es posible que pueda determinar una combinación exacta de constructor y API que le brinde lo que desea. –
Gracias Mark. No estoy familiarizado con Reflector, pero voy a echarle un vistazo. Suena potencialmente prometedor. –