我要做的是在vb6控制台应用程序中以像素级处理下载的图像,这些是当前的步骤
我从网站下载一个png文件,这是一个32位图像,图像是灰度,当图像是第一个 下载我需要将其转换为24位位图,以便能够处理它,如果我在Paint中打开图像并保存 它作为一个24位位图我能够处理图像没有问题,当保存在Paint I dod保存时得到一条消息 说“如果保存这张图片,任何透明度都会丢失。”一旦保存,我就会对文件进行二进制读取,然后提取
BITMAPFILEHEADER
BITMAPINFOHEADER
BMPData
然后我可以遍历BMPData并提取并处理所需的值。如果我尝试加载图像而不先保存 它在绘制中的24位位图,我收到VB中的内存不足错误(运行时错误7)和BMPInfoHeader.biSizeImage是 与通过油漆保存后的大小相比非常大。
我尝试使用ImageMagick-6.9.0-Q16 ad和GraphicsMagick-1.3.21-Q8进行转换,但这些似乎只是搞乱了转换后的文件。
有人有任何想法吗?
此致
Potman100
答案 0 :(得分:1)
我已经尝试了所有我知道的让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
设置位深度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
图片,如here所述。如果您想要更简单的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
答案 1 :(得分:0)
转换yourImage.png -compress none output.ppm
我必须做一些进一步的测试来检查值,但我认为它会起作用。
需要能够创建一个24位的位图是我正在做的项目的一部分,我得到的网站 png图像生成此图像,为我可能销售的商品提供£价格 他们,所以png将包含££(即1.56英镑),我希望能够解决这个问题 我编写的dos程序中的商品价值,因此可以从php调用。
我确实找到了一种方法,我使用xmlhttp通过adodb流下载图像并找到 我可以用bmp以外的多种格式保存图像,所以我看了 以不同图像格式的格式,发现tif文件格式看起来很有前景 并在网上找到了一些使用Microsoft Image Acquistion Library操作tif的代码 文件。
通过将tif文件加载到WIA.ImageFile并向其应用WIA.Vector,您可以 通过将值一起添加,迭代图像中的像素并获取原始颜色值 按列并考虑到您的列都是白色的,这些只是存在 一个空白列我能够为每个字符生成一个唯一值。
感谢您的帮助。
Potman100