Сохранение Битового массива оценивает при создании нового Битового массива из Системы. Рисование. Изображение

Я пытаюсь создать измененное изображение из битового массива, установить новую высоту/ширину и новое разрешение и сохранить его к PNG. Я могу сделать это любой от непосредственно A) Image.FromFile(filename) или B) New Bitmap(imageSource) создать Битовый массив, который будет передан B. Обе работы хорошо schmokay, но A не позволяют мне устанавливать новую ширину/высоту на создании (но это действительно позволяет мне сохранять значения с useIcm=True) и B не позволяет мне сохранять значения.

Хорошо, теперь на некотором коде и примерах:

  1. Dim sourceBitmap As New Bitmap(imagePath & myImage1Name) <-не хороший вообще (#1 перегрузка). Не сохраняет вещи как HorizontalResolution или PixelFormat на .Save

  2. Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True) <-не хороший (#5 перегрузка). это действительно сохраняет вещи как HorizontalResolution или PixelFormat на .Save, но это не позволяет мне инициализировать изображение в новом размере.

  3. 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.

8
задан Todd Main 30 June 2010 в 22:04
поделиться

2 ответа

Почему бы просто не сделать Dim targetBitmap As New Bitmap (Image.FromFile (imagePath & myImage1Name, True), newWidth, newHeight) ?

3
ответ дан 5 December 2019 в 22:16
поделиться

А как насчет того, чтобы сделать что-то вроде следующего кода: Вы можете нарисовать растровое изображение на 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
3
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: