如何以编程方式创建位图?

Posted

技术标签:

【中文标题】如何以编程方式创建位图?【英文标题】:How to Create a Bitmap Programmatically? 【发布时间】:2009-08-14 11:43:14 【问题描述】:

我想以编程方式创建一个随机的 X 高度和 Y 宽度位图文件。

对我来说,内容无关紧要。它可能全是白色的,空的。重要的是维度。

如何使用 Windows API 做到这一点?

【问题讨论】:

我想用 Windows API 来做...那真的没关系。 VB6、C++,任你选择 【参考方案1】:

您希望使用 Windows API 创建位图文件?没有专门的帮手。然而,一个 BMP 文件非常简单:

写出BITMAPFILEHEADER 结构。 写出BITMAPINFO 结构。 写出一个字节数组,足以容纳BITMAPINFO 结构中描述的格式和维度。

MSDN 有一个Article,其中包含演示如何使用的示例代码。

【讨论】:

【参考方案2】:

我想您已经安装了 Microsoft .NET 2.0 Framework。 (1.1也可用)。

使用记事本,使用以下代码创建 test.cs 文件:

namespace test

    class Program
    
        static void Main(string[] args)
        
            if (args.Length == 3)
                new System.Drawing.Bitmap(System.Convert.ToInt32(args[0]), System.Convert.ToInt32(args[1]))
                    .Save(args[2] + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
            else
                System.Console.WriteLine("Usage: test.exe 100 200 filename");
        
    

然后使用以下代码创建 test.cmd 文件:

@echo off
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:exe test.cs

执行 test.cmd

执行 text.exe

【讨论】:

【参考方案3】:

在 .Net 中,您可以新建一个 Bitmap 对象:

Image myImage = new Bitmap(width, height);

【讨论】:

.NET 不是一个选择,我想只使用 Windows API 来实现【参考方案4】:

GDI+ 包括在 C++ 中加载/保存 BMP 图像的命令。此示例代码显示如何加载和保存图像:Converting a BMP Image to a PNG Image。 Bitmap 类还有一个ctor,它采用宽度、高度和像素格式来创建空图像。

【讨论】:

【参考方案5】:

如果你真的坚持用windows API制作图像,你应该使用Gdi32.dll 在 C# 中只需调用

将 dll 文件导入您的程序集中,以便您可以在

中使用外部方法
DllImport["Gdi32.dll"]
HBITMAP CreateCompatibleBitmap(
  HDC 硬盘,
  整数宽度,
  整数高度
); 

然后像

一样从这个 Bitmap 调用 Bitmap 类
位图 bmp = Bitmap.FromHbitmap( nameOfBitmap );
bmp.Save("C:\NewImage.jpg");

msdn页面中有一个例子here

【讨论】:

这将如何解决他的问题?他不能那样保存 BMP 文件。 在这个问题中创建位图很重要,而不是保存!

以上是关于如何以编程方式创建位图?的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript / Flash - 以编程方式位图填充 IDE 绘制的矢量?

如何将视图添加到视图组?

如何以编程方式将 9-patch 图像重新应用到 ImageView?

在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?

为什么RGBA位图需要3x3阵列来存储1个像素?如何避免这种情况?

以编程方式将图像添加到Word文档