如何在Magick.NET中创建8 bpp BMP? - c#

使用Magick.NET-Q8-AnyCPU。我想将现有的TIFF图像转换为灰度8 bpp BMP图像。我尝试了这个:

byte[] input = <existing TIFF image>;
using (var image = new MagickImage(input))
{
    image.Grayscale();
    image.ColorType = ColorType.Palette;
    image.Depth = 8;
    image.Quantize(new QuantizeSettings() { Colors = 256,  DitherMethod = DitherMethod.No });

    byte[] result = image.ToByteArray(MagickFormat.Bmp);

    return result;
}

在FastStone Viewer中,图像报告为8位,但是在“属性”>“详细信息”文件中,图像报告为位深度:32。这里我需要将其设置为8。我可以在Paint.NET中转换此图像,然后在此处选择“位深度:8位”,新图像将在文件属性中正确显示8位深度。

因此,Paint.NET创建适当的8位位图。如何使用Magick.NET做到这一点?

参考方案

Windows资源管理器将所有压缩的BMP文件显示为32位,而不是其实际位深。

我不知道这是不是一个bug,但是我更接近称它为bug。

因为;用代码创建8bpp BMP文件后,当我使用二进制编辑器打开文件时,在位图标头结构中,我看到每个像素字段值的位数(框28-29)必须是8。同样,下一个字节01(偏移量30)表示使用Run-length encoding压缩的数据,这是一种直接的无损数据压缩算法。

因此,我可以说用Magick.NET生成的图像没有问题,它肯定是一个8bpp BMP图像文件,但已压缩。

与Magick.NET的默认值不同,Paint.NET似乎会生成未压缩的BMP文件,因此,由于Windows资源管理器的怪异,您会看到不同的位深。

要解决此问题,您可以禁用压缩,以便在属性对话框中显示的位深度值将是您期望的值。

image.Settings.Compression = CompressionMethod.NoCompression;
byte[] result = image.ToByteArray(MagickFormat.Bmp);

如何使用ASP.NET ViewState使用JavaScript - c#

我的页面中有UL,它为空。我开始使用JavaScript使用LI填充它。在回发阶段如何在asp.net中使用此新添加的动态数据?那是因为我的提交按钮是asp.net控件。我不想使用JS POST。谢谢 参考方案 我过去通过在隐藏字段中填充要发布的动态数据来完成此类操作,您可以-在回传之前触发JavaScript事件,该事件将数据从UL解析到隐藏字段中要么更新…

如何从.Net DLL获取公共出口列表? - c#

我可以使用“ dumpbin”和“ dll export”之类的工具来查看标准win32 DLL的公共入口点(“ exports”),例如Windows \ SYSTEM32 \ GDI32.dll。但是,当我在.Net DLL上使用这些相同的工具时,我看到的仅仅是 2000 .reloc 2000 .rsrc 48000 .text 我有一个C#/。Net…

将asp.net c#变量分配给javascript数组 - c#

我有2个工作部分的代码,需要将它们放在一起第1节-用户可以访问页面,查看和编辑数据库的内容,其中包括新闻文章,标题,相关链接等,我设法使其正常工作并将数据保存到数据库中第2条-该网站首页上的javascript新闻滚动器会写出一系列div,然后使用javascript和CSS对其进行旋转,使其看起来像在滚动,同样可以。新闻文章是从首页上硬编码的数组中提取的问…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…