Я пытаюсь создать измененное изображение из битового массива, установить новую высоту/ширину и новое разрешение и сохранить его к PNG. Я могу сделать это любой от непосредственно A) Image.FromFile(filename)
или B) New Bitmap(imageSource)
создать Битовый массив, который будет передан B. Обе работы хорошо schmokay, но A не позволяют мне устанавливать новую ширину/высоту на создании (но это действительно позволяет мне сохранять значения с useIcm=True
) и B не позволяет мне сохранять значения.
Хорошо, теперь на некотором коде и примерах:
Dim sourceBitmap As New Bitmap(imagePath & myImage1Name)
<-не хороший вообще (#1 перегрузка). Не сохраняет вещи как HorizontalResolution
или PixelFormat
на .Save
Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True)
<-не хороший (#5 перегрузка). это действительно сохраняет вещи как HorizontalResolution
или PixelFormat
на .Save
, но это не позволяет мне инициализировать изображение в новом размере.
Dim targetBitmap As New Bitmap(sourceBitmap2, newWidth, newHeight)
<-не хороший. Даже при том, что sourceBitmap2
(см. № 2 выше), был инициализирован с useIcm=True
, это не имеет значения, после того как я передал его в как источник в targetBitmap
.В основном я ищу способ создать Новый Битовый массив с обоими что-то как useIcm=True
и набор ширина/высота одновременно (Width
/Height
свойства только для чтения, после того как это создается).
Я спустился Graphics.DrawImage
направьте также, и это - то же - Graphics.FromImage(sourceBitmap)
не сохраняет значения.
Почему мне нужны эти значения, которые будут сохранены? Поскольку я должен преобразовать эти изображения в PNG (для размера файла) с новым разрешением и сохранить те же физические размеры (w/h в дюймах) для печати. Я знаю новую пиксельную ширину/высоту, необходимую на основе значений разрешения, в которых я передам с .SetResolution(xDpi,yDpi)
сохранить физические размеры, таким образом, это не проблема. Проблемой являются вещи как PixelFormatSize
потребность остаться неизменным (да, я попробовал EncoderParameters
- они не работают. Я могу предоставить Вам окровавленную подробную информацию, если Вам нравится, но достаточно сказать на данный момент, они просто не работают).
Ух, получил это от моей груди! Хорошо, кто-либо, кто действительно знает, как все это работает, может помочь?
Править: Типы файлов должны были сдержаться для преобразования в PNG: BMP, TIF, GIF, WMF, EMF.
Почему бы просто не сделать Dim targetBitmap As New Bitmap (Image.FromFile (imagePath & myImage1Name, True), newWidth, newHeight)
?
А как насчет того, чтобы сделать что-то вроде следующего кода: Вы можете нарисовать растровое изображение на NEWGraphic. Затем вы можете изменить размер, когда будете его перерисовывать.
Dim NewGraphic As Graphics = Nothing
Dim OutBMP As Bitmap
Using bmp As New Bitmap(3264, 4224)
Try
NewGraphic = Graphics.FromImage(bmp)
NewGraphic.FillRectangle(New SolidBrush(Color.White), 0, 0, 3264, 4224)
NewGraphic.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
NewGraphic.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
NewGraphic.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
NewGraphic.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
NewGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
NewGraphic.DrawImage(MetaFileToConvert, 0, 0, 3264, 4224)
OutBMP = CType(FFConvertToBitonal(CType(bmp, Bitmap)), Bitmap)
OutBMP.SetResolution(385, 385)
OutImage = DirectCast(OutBMP, Image)
Catch ex As Exception
Throw ex
Finally
NewGraphic.Dispose()
End Try
End Using