将32位Png转换为24位位图



我想做的是在vb6控制台应用程序中以像素级别处理下载的图像,这些是目前的步骤

我从网站上下载了一个png文件,它是一个32位的图像,当图像是第一个时,图像是灰度级的下载后,如果我在Paint中打开图像并保存,我需要将其转换为24位位图才能处理它它是一个24位位图,我可以毫无问题地处理图像,当保存在Paint中时,我在保存时会收到一条消息说"如果你保存这张照片,任何透明度都会丢失。",保存后,我会对文件进行二进制读取,然后提取

位图文件头
BITMAPINFOHEADER
BMPData

然后,我可以循环浏览BMPData,提取并处理所需的值。如果我尝试加载图像而不首先保存它在paint中是一个24位位图,我在VB中收到一个内存不足错误(运行时错误7),BMPInfoHeader.biSizeImage是与它所追求的尺寸相比,非常大的尺寸已经通过油漆保存了下来。

我试着用ImageMagick-6.90-Q16广告和GraphicsMagick-1.3.21-Q8进行转换,但这些似乎只是把转换后的文件搞砸了。

有人知道吗?

问候

Potman100

我已经尽我所能让ImageMagick从灰度32位PNG文件创建24位彩色BMP,包括:

  • +matte删除alpha通道
  • -type truecolor强制彩色输出
  • BMP4:output.bmp强制BMP4
  • BMP3:output.bmp强制BMP3
  • BMP2:output.bmp强制BMP2
  • -colors 16|256强制颜色数量
  • -depth 8|24设置比特深度
  • 通过PPM格式并返回以摆脱PNG设置
  • 通过NetPBM的ppm2bmp/ppmtobmp进行写入

但都无济于事。我无法使用ImageMagick从灰色32位PNG创建24位彩色BMP。

更新

我已经想出了一个可怕的破解方法,它将使你成为一个24位BMP,如下所示。在灰度图像中,每个像素的红色=绿色=蓝色强度。如果我们决定将每个蓝色像素乘以0.99,那么,在只有1%的误差的情况下,蓝色像素将小于红色和绿色,因此ImageMagick将无法使用灰度图像将BMP保存在…中,如下所示:

convert input.png +matte -channel B -evaluate multiply 0.99 image.bmp

我不知道这对你是否有效,如果是的话,很好,到此为止。如果没有,请继续。。。

我唯一能建议的是,你使用PPM格式,它甚至比BMP更容易让你从中读取

convert yourImage.png output.ppm

这将获得一个P6类型的PPM图像,如这里所述。如果您想要更简单的ASCII P3版本,请使用以下命令

convert yourImage.png -compress none output.ppm

您的图像将如下所示:

P3
384 128
255
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255

哇,谢谢你花了这么多时间和精力为我找到一个有效的解决方案,我已经尝试过上面的,可能会起作用的是

转换你的图像.png-压缩无输出.ppm

我必须做一些进一步的测试来检查这些值,但我认为它会起作用。

需要能够创建一个24位位图是我正在做的项目的一部分,我得到的网站来自的png图像生成此图像,为我可能出售的商品提供£的价格因此png将包含£Value(即1.56英镑),我希望能够计算出在我编写的dos程序中提供的值,所以它可以从php调用。

我确实找到了一种方法,我使用xmlhttp通过adodb流下载图像,并发现我可以用bmp以外的多种不同格式保存图像,所以我看起来在不同图像格式的格式上,发现tif文件格式看起来很有前景并在网上找到了一些使用Microsoft图像采集库来操作tif的代码文件

通过将tif文件加载到WIA.ImageFile并应用WIA.Vector,您可以将图像中的像素相加,得到原始颜色值按列,并考虑到您的列都是白色的,这些只是在空白列中,我能够为每个字符生成一个唯一的值。

谢谢你的帮助。

Potman100

相关内容

  • 没有找到相关文章

最新更新