我想做的是在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
强制BMP4BMP3:output.bmp
强制BMP3BMP2: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