Image processing ImageMagick将BMP从24位模式转换为16位模式?

Image processing ImageMagick将BMP从24位模式转换为16位模式?,image-processing,imagemagick,imagemagick-convert,imagemagick-identify,Image Processing,Imagemagick,Imagemagick Convert,Imagemagick Identify,我正在尝试在ImageMagick中将BMP从24位/像素模式转换为16位/像素模式 convert /tmp/a/new/37.bmp -depth 5 -define bmp:format=bmp2 /tmp/a/new/37_v2_16bit.bmp convert /tmp/a/new/37.bmp -depth 5 -define bmp:format=bmp3 /tmp/a/new/37_v3_16bit.bmp 根据以下输出,结果具有相同的8位/R、G和B: 识别-详细 我做错了

我正在尝试在ImageMagick中将BMP从24位/像素模式转换为16位/像素模式

convert /tmp/a/new/37.bmp -depth 5 -define bmp:format=bmp2 /tmp/a/new/37_v2_16bit.bmp
convert /tmp/a/new/37.bmp -depth 5 -define bmp:format=bmp3 /tmp/a/new/37_v3_16bit.bmp
根据以下输出,结果具有相同的8位/R、G和B: 识别-详细

我做错了什么?如何在BMP中获得16位颜色

谢谢大家!

附言

-深度值

图像的深度。这是像素中的位数。唯一可接受的值是8或16。

=(

官方文件显示(未提及限制):

-深度值

图像的深度

这是像素内颜色样本中的位数。使用此选项可指定深度未知的原始图像(如灰度、RGB或CMYK)的深度,或在读取任何图像后更改其深度


convert/tmp/a/new/37.bmp-colors 256/tmp/a/new/37_256.bmp

使文件变小,但在视觉上它是相同的!wth?!(“”);)


convert/tmp/a/new/37.bmp-colors 65536/tmp/a/new/37_64k.bmp

同样的尺寸,同样的视觉图片


convert/tmp/a/new/37.bmp-无抖动-颜色256/tmp/a/new/37_256_nd.bmp


再小一点,但看起来不像256色!缺陷256色800x600 BMP为~800x600x1字节(无头)~480000字节。但是上面写着大约650000字节(有趣的程序)

你从linux.math引用的文档。。。是相当古老的(2001年),关于深度是不正确的。“-depth 16”选项并不意味着16位像素(如R5G6R5或R5G5R5A1)-深度16表示48位/像素R16、G16、B16或64位/像素R16、G16、B16、A16像素。您引用的“官方文件”(2015)是正确的

ImageMagick不支持这种16位/像素格式,因此您需要以8位/通道格式存储它们,并使用更大的文件大小

另外,对于256色或更少颜色的图像,它将编写一个具有1、4或8位索引的彩色映射图像。你不必提出任何特殊要求,它会自动这样做。对未压缩的BMP使用“-compress none”。当前的ImageMagick(版本6.9.2-8)提供了预期的480kbyte文件,如果我从一个超过256色的800x600图像开始,并使用

convert im.bmp -colors 256 -compress none out.bmp

ImageMagick在读取时确实支持16位“位域”BMP格式,但我看不到任何迹象表明它可以写入这些格式,也没有尝试读取或写入此类图像

它不是ImageMagick,而是与视频更相关的
ffmpeg
,如果您指的是565格式,它可以创建16位bmp图像吗

ffmpeg -i ffmpeg-logo.png -sws_flags neighbor -sws_dither none -pix_fmt rgb565 -y ffmpeg-logo-16bit-nodither.bmp
这是有意禁用抖动的,但如果需要,只需忽略sws部分,例如

ffmpeg -i ffmpeg-logo.png -pix_fmt rgb565 -y ffmpeg-logo-16bit-dithered.bmp
如果你的图像是天生的rgb565来源,那么它不应该抖动它们,但我会一直保持谨慎,在进行任何批处理转换之前仔细检查一些


根据评论中的讨论,它听起来是一种很好的格式,可以一字不差地保存旧的屏幕截图,因为它使用无损压缩,但可能由于与老式软件一起使用而不适用?

ppmtobmp
手册页同意16位BMP是不可能的。。。对于16 bpp的BMP,您实际上想要做什么?也许你可以使用PNG或NetPBM的PNM格式,这是非常简单的处理。。。我总是喜欢别人试图让我改变我的观点,而不是回答:)我想用BMP做什么?我需要16位BMP来存储旧游戏的截图,这些游戏使用16位图形,无需压缩,以无损的方式,以易于打开的格式。Photoshop帮助了我。但是在Linux上它不起作用…请不要把那些试图帮助你的人误认为是告诉你改变主意的人。感谢Glenn提到颜色深度定义-我在搜索类似的信息,只是得出结论,深度代表每种颜色,而不是总颜色(如你所提到的)我花了好几个小时才找到。但是,我仍然在寻找(a)ImageMagick.org上setImageDepth()手册页的“官方”位置。我使用的是php Imagick,其主页非常简短(b)我想将图像的深度设置为2(即每RGB颜色),并最终将其写入PNG。似乎设置深度没有任何效果-最终显示为8位。有人能帮忙吗?PNG格式不支持RGB222或6位索引,因此它将被写成RGB888或8位索引,后者带有64个条目的调色板。Glenn,再次非常感谢。PNG格式不支持RGB222是否是Imagick/IM的限制?我这样问是因为我在这里看到:“颜色深度可以从每像素1位到64位。”如果是这样,是否有一个指针,指示在PHP Imagick/IM中支持每种文件格式的不同深度?我不一定需要使用PNG作为输出格式。这里定义了PNG中定义的深度和颜色类型:对于其他格式,ImageMagick通常支持各自格式允许的任何深度。我认为ImageMagick文档中没有这些表。ImageMagick不能做我想做的事。我结束回答的问题。