有一个生成的图片,可以在windows下预览,但不能用loadpicture加载。

dingyanwei 2009-12-11 11:56:10
预览,估计够呛


图片下载地址:
http://d.ksxt.net/que/1.rar

用的是bmp扩展名,但实际上不是bmp格式的,我想问通过何种方式可以把此图片通过loadpicture加载,对于图像处理,一点头绪都没有。

注:这个图片实际就是进入vb后,自动存在剪贴板的那个图片,因为下载的文件大小会跟你的显示分辨率相同,可能会放大到无法分辨是什么东西,所以标注一下。
...全文
971 80 打赏 收藏 转发到动态 举报
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
VBAdvisor 2010-01-21
  • 打赏
  • 举报
回复
1.bmp
Image Type :Windows Meta File
Size :1020 x 767
Color : True Color + Alpha
liguicd 2010-01-07
  • 打赏
  • 举报
回复
学习
liquoryellow 2010-01-07
  • 打赏
  • 举报
回复
用PS全部处理被。
dingyanwei 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 77 楼 liquoryellow 的回复:]
用PS全部处理被。
[/Quote]

你用ps打开试试
stayor 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 dingyanwei 的回复:]
顺便问问,有没有办法直接将点阵信息通过picturebox展示出来呢?

现在才发现,windows自带画图软件还有windows的图片传真查看器真的很厉害,用Photoshop都读取不了这种图片信息。
[/Quote]

自己做的图片自己能看,这叫厉害吗?
VBProFan 2009-12-29
  • 打赏
  • 举报
回复
还以为矢量图是记录画图的方法,放大后不会模糊,原来只是简单的复制插值算法而已,汗
dingyanwei 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 75 楼 stayor 的回复:]
引用 30 楼 dingyanwei 的回复:
顺便问问,有没有办法直接将点阵信息通过picturebox展示出来呢?

现在才发现,windows自带画图软件还有windows的图片传真查看器真的很厉害,用Photoshop都读取不了这种图片信息。


自己做的图片自己能看,这叫厉害吗?
[/Quote]

请看完所有楼的内容后再说说看。
这个图片不是windows自己做的。
dingyanwei 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 ahjoe 的回复:]
这个文件根本就不是BITMAP格式。

是矢量图。Windows Metafile (.wmf),文件头格式

typedef struct _WindowsMetaHeader

{

  WORD  FileType;      /* Type of metafile (0=memory, 1=disk) */

  WORD  HeaderSize;    /* Size of header in WORDS (always 9) */

  WORD  Version;        /* Version of Microsoft Windows used */

  DWORD FileSize;      /* Total size of the metafile in WORDs */

  WORD  NumOfObjects;  /* Number of objects in the file */

  DWORD MaxRecordSize;  /* The size of largest record in WORDs */

  WORD  NumOfParams;    /* Not Used (always 0) */

} WMFHEAD;


[/Quote]

再具体说说
ahjoe 2009-12-25
  • 打赏
  • 举报
回复
这个文件根本就不是BITMAP格式。

是矢量图。Windows Metafile (.wmf),文件头格式

typedef struct _WindowsMetaHeader

{

WORD FileType; /* Type of metafile (0=memory, 1=disk) */

WORD HeaderSize; /* Size of header in WORDS (always 9) */

WORD Version; /* Version of Microsoft Windows used */

DWORD FileSize; /* Total size of the metafile in WORDs */

WORD NumOfObjects; /* Number of objects in the file */

DWORD MaxRecordSize; /* The size of largest record in WORDs */

WORD NumOfParams; /* Not Used (always 0) */

} WMFHEAD;

东方之珠 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 61 楼 myjian 的回复:]
支持~~~~~~~
[/Quote]

哈哈,三星了,散分吧!
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
确实是高手,能解到这个程度佩服死了。
VBProFan 2009-12-13
  • 打赏
  • 举报
回复
4. 为什么我解出来的最左边要补到最右边才和画图的一样?
VBProFan 2009-12-13
  • 打赏
  • 举报
回复
完善了一下,并且搞了个好玩的东东:可以在不知道图片的宽度的情况下动态调整,人眼观察来寻找。

核心代码:(完整工程请到 http://www.vbgood.com/viewthread.php?tid=89736&page=1#pid494362 下载)

FileY = 0

Do While True



For x = 1 To HScroll1.Value

ImageY = c_MaxHeight + 1 - FileY

PSet (x, ImageY), RGB(MyPixel(FileY * HScroll1.Value + x).B, MyPixel(FileY * HScroll1.Value + x).G, MyPixel(FileY * HScroll1.Value + x).R)

If FileY * HScroll1.Value + x = UBound(MyPixel) Then

Exit Do

End If

Next x



FileY = FileY + 1

Loop
复制代码现在还有3个未解之谜:
1. 为什么最下边有几个彩色的点?
2. 画图是如何知道图片的宽度的?我的新版的程序对剩余字节也解不出什么有用信息,直接在图片文件里搜索 10H 也找不到。
3. 对59楼的图片,我的程序解出来的是灰度图,而画图确是彩色的,为什么?
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 69 楼 syssz 的回复:]
我认为,根本原因是由于该图片的色深为32位造成的,VB的控件不支持色深为32的图片,要想用VB的控件显示,需要降低图片的色深到24或以下.
[/Quote]

32位是假象,其实24位的,再说降低也是个问题。
SYSSZ 2009-12-13
  • 打赏
  • 举报
回复
我认为,根本原因是由于该图片的色深为32位造成的,VB的控件不支持色深为32的图片,要想用VB的控件显示,需要降低图片的色深到24或以下.
SYSSZ 2009-12-13
  • 打赏
  • 举报
回复
我认为,根本原因是由于该图片的色深为32位造成的,VB的控件不支持色深为32的图片,要想用VB的控件显示,需要降低图片的色深到24或以下.
嗷嗷叫的老马 2009-12-13
  • 打赏
  • 举报
回复
没以前的激情了.....随他吧,嘿嘿.....
dingyanwei 2009-12-12
  • 打赏
  • 举报
回复
vbgood版主确实挺厉害,那个图片就是16*16的
zdingyun 2009-12-12
  • 打赏
  • 举报
回复
我昨天在VBGOOD将本贴转发,现在有大进展.VBGood的版主VBProFan给出了解析代码,我已经略做修改,除颜色有些差异,基本达目的,代码如下:
Option Explicit
Private Type udtRGB
R As Byte
G As Byte
B As Byte
End Type
Private MyPixel(1 To 933 / 3) As udtRGB
Private Sub Form_Load()
Open "D:\新建文件夹\1.bmp" For Binary Access Read As #1 '奇异图片的路径
Get #1, 2, MyPixel
Close #1
Me.ScaleMode = vbPixels
End Sub
Private Sub Form_Paint()
Dim i As Byte
Dim j As Byte
For i = 1 To 16
For j = 1 To 16
PSet (i, 17 - j), RGB(MyPixel(j * 16 + i).R, MyPixel(j * 16 + i).G, MyPixel(j * 16 + i).B)
'PSet (j, 17 - i), RGB(MyPixel(i * 16 + j).R, MyPixel(i * 16 + j).G, MyPixel(i * 16 + j).B)
Next j
Next i
End Sub

效果如下:


dingyanwei 2009-12-12
  • 打赏
  • 举报
回复
又做了一个图片,这个看得清楚
下载地址:
http://d.ksxt.net/que/2.rar
加载更多回复(59)

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧