Graphics 将32位Png转换为24位位图
我要做的是在vb6控制台应用程序中以像素级处理下载的图像,以下是当前的步骤 我从一个网站下载了一个png文件,这是一个32位的图像,图像是灰度的,当图像是第一个 下载我需要将其转换为24位位图,以便能够处理它,如果我在Paint中打开图像并保存 它作为一个24位位图,我能够处理图像而不会出现问题,当保存在Paint中时,我会在保存时收到一条消息 表示“如果保存此图片,任何透明度都将丢失”。保存后,我将对文件进行二进制读取,然后提取 BITMAPFILEHEADERGraphics 将32位Png转换为24位位图,graphics,vb6,imagemagick-convert,Graphics,Vb6,Imagemagick Convert,我要做的是在vb6控制台应用程序中以像素级处理下载的图像,以下是当前的步骤 我从一个网站下载了一个png文件,这是一个32位的图像,图像是灰度的,当图像是第一个 下载我需要将其转换为24位位图,以便能够处理它,如果我在Paint中打开图像并保存 它作为一个24位位图,我能够处理图像而不会出现问题,当保存在Paint中时,我会在保存时收到一条消息 表示“如果保存此图片,任何透明度都将丢失”。保存后,我将对文件进行二进制读取,然后提取 BITMAPFILEHEADER BitMapInfo头 BMP
BitMapInfo头
BMPData 然后我可以循环浏览BMPData并提取和处理所需的值。如果我尝试加载图像而不先保存 它在画图中显示为24位位图,我在VB中收到内存不足错误(运行时错误7),BMPInfoHeader.biSizeImage是 非常大,与它的尺寸相比,它是通过油漆保存的 我曾尝试使用ImageMagick-6.9.0-Q16 ad和GraphicsMagick-1.3.21-Q8进行转换,但这些似乎会弄乱转换后的文件 有人知道他的名字吗 问候
Potman100我尝试了我所知道的一切,让ImageMagick从灰度32位PNG文件创建24位彩色BMP,包括:
删除alpha通道+matte
强制输出颜色-键入truecolor
强制BMP4BMP4:output.bmp
强制BMP3BMP3:output.bmp
强制BMP2BMP2:output.bmp
强制使用颜色数-颜色16 | 256
设置位深度-深度8 | 24
- 通过PPM格式并返回以摆脱PNG设置
- 通过NetPBM的
ppm2bmp/ppmtobmp写入
convert input.png +matte -channel B -evaluate multiply 0.99 image.bmp
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
我不知道这对你是否有效,如果是,很好,到此为止。如果没有,请继续
我唯一能建议的是使用PPM
格式,这比BMP更容易阅读
convert yourImage.png output.ppm
这将得到一个P6
类型PPM
图像,如前所述。如果您想要更简单的ASCII P3版本,请使用以下命令
convert yourImage.png -compress none output.ppm
您的图像将如下所示:
convert input.png +matte -channel B -evaluate multiply 0.99 image.bmp
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
哇,谢谢你花了这么多时间和精力为我找到一个有效的解决方案, 我已经尝试过上面的方法,可能有效的方法是 转换yourImage.png-压缩none output.ppm 我必须做一些进一步的测试来检查这些值,但我认为它会起作用 需要能够创建一个24位位图是我正在做的项目的一部分,我得到的网站 来自的png图像生成此图像,为我可能出售给的物品提供英镑价格 它们,所以png将包含一个£Value(即£1.56),我希望能够计算出 在我编写的dos程序中提供的值,所以可以从php调用它 我确实找到了一种方法,我使用xmlhttp通过adodb流下载图像,并找到了 我可以用bmp以外的多种格式保存图像,所以我 在不同图像格式的格式下,发现tif文件格式看起来很有前途 并在网上找到了一些使用Microsoft Image Acquisition库操作tif的代码 文件 通过将tif文件加载到WIA.ImageFile并对其应用WIA.Vector,您可以 将图像中的像素相加,得到原始颜色值 按列排列,考虑到你们有一列都是白色的,这些只是 一个空白列可以为每个字符生成一个唯一的值 谢谢你的帮助
Potman 100这没有多大意义。听起来像是一个普通的旧RGBA PNG,恰好使用了256个灰度。不知道这里为什么需要流对象,也不知道它给您带来了什么,因为您只需获取一个字节数组,并在需要的地方将其提供给WIA。但是你似乎在说你正在对图像执行一些手工编码的OCR操作来提取文本。这一定很慢,因为您将获得的向量格式提供了一个缓慢的变量长值集合,更不用说您的OCR代码了。我不知道TIF格式是如何在这些问题上发挥作用的。谢谢你的评论,我对图形编程/操作不是很在行,只是想找到一个可行的解决方案。我认为这可能有点慢,但目前解析字符需要大约1-2秒,如果我理解正确,您会建议从xmlhttp响应主体填充wia向量?当然。只需将.responseBody提取到动态字节数组中。然后将该数组分配给新空向量的.BinaryData。