gpt4 book ai didi

.net - 从 System.Drawing.Image 创建新位图时保留位图值

转载 作者:行者123 更新时间:2023-12-04 08:17:43 27 4
gpt4 key购买 nike

我正在尝试从位图创建调整大小的图像,设置新的高度/宽度和新的分辨率并将其保存为 PNG。我可以直接从 A) Image.FromFile(filename) 中做到这一点或 B) New Bitmap(imageSource)创建 一个 位图传递给 .两者都可以正常工作,但是 一个 不允许我在创建时设置新的宽度/高度(但它允许我使用 useIcm=True 保留值)乙 不允许我保留值。

好的,现在开始一些代码和示例:

  • Dim sourceBitmap As New
    Bitmap(imagePath & myImage1Name)
    <-一点都不好(#1 过载)。不保存
    诸如 HorizontalResolutionPixelFormat.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(用于文件大小)并保持相同的物理尺寸(以英寸为单位)进行打印。根据我将通过 .SetResolution(xDpi,yDpi) 传入的分辨率值,我知道所需的新像素宽度/高度保持物理尺寸,所以这不是问题。问题是类似 PixelFormatSize需要保持不变(是的,我试过 EncoderParameters - 它们不起作用。如果你愿意,我可以给你血腥的细节,但现在就足够了,它们只是不起作用)。

    哇,把它从我的胸膛上拿开!好的,任何真正了解所有这些工作原理的人都可以提供帮助吗?

    编辑 :转换为 PNG 所需的文件类型:BMP、TIF、GIF、WMF、EMF。

    最佳答案

    执行以下代码怎么样:您可以在 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

    关于.net - 从 System.Drawing.Image 创建新位图时保留位图值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839001/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com