| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5397 人关注过本帖
标题:vb 读取图像文件(jpg或bmp等都行)
只看楼主 加入收藏
caivsi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
vb 读取图像文件(jpg或bmp等都行)
各位高手
大家好
我最近想做一个小工具,就是想通过VB对图像文件进行校正,谁有相关方面的程序代码吗?
如果有的话,麻烦提供参考一下,非常感谢!
vb 读取图像文件(jpg或bmp等都行)
1、用二进制把图像文件读取出来
2、通过VB用二进制成图(在原图上放大一倍)

[此贴子已经被作者于2015-10-29 10:53编辑过]

搜索更多相关主题的帖子: 二进制 校正 
2015-10-29 10:36
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:7 
可以用loadpictue读入,用paintpicture放大,用savepicture存(只能存bmp格式)

能编个毛线衣吗?
2015-10-29 11:11
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:7 
程序代码:
Option Explicit

'Bmp公用函数

'BMP压缩类型,
Public Const BI_RGB = 0     '非压缩
Public Const BI_RLE8 = 1
Public Const BI_RLE4 = 2

Public Type BMP文件头结构类型
    文件类型标识 As String * 2      '二字节长,只能为BM
    文件长度 As Long                '文件长度,4字节
    保留字1 As Integer              '系统保留,2字节,只能为0
    保留字2 As Integer              '系统保留,2字节,只能为0
    数据起始位置 As Long            '数据起始位置,相对数据头
End Type
    
Public Type BMP文件颜色表类型
    蓝 As Byte
    绿 As ByteAs Byte
    保留 As Byte
End Type
    
Public Type BMP文件位图信息头类型
    本结构长度 As Long              '本结构的长度,包含颜色表的
    图像宽 As Long                  '图像宽
    图像高 As Long                  '图像高
    目标设备级别 As Integer         '目标设备级别,只能为1
    色彩位数 As Integer             '每像素色彩位数,只能为1(双色),4(16色),8(256色),24(真彩) 四种
    压缩 As Long                    '是否是压缩的,必须是 0(不压缩), 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
    位图大小 As Long                '位图数据区的大小
    位图水平分辨率 As Long          '位图水平分辨率,每米像素数,好像可以为零
    位图垂直分辨率 As Long          '位图垂直分辨率,每米像素数,好像可以为零
    使用的颜色数 As Long            '位图实际使用的颜色表中的颜色数
    重要的颜色数 As Long            '位图显示过程中重要的颜色数
'    颜色表() as BMP文件颜色表类型   '颜色表,=色彩位数^2 ,色彩位数为24时,无颜色表
End Type

Public Type BMP扫描行类型
    X() As Byte
    空() As Byte
End Type

Public Type BMP文件类型
    文件标识 As BMP文件头结构类型
    位图信息 As BMP文件位图信息头类型
    颜色表() As BMP文件颜色表类型   '颜色表,=色彩位数^2 ,色彩位数为24时,无颜色表
    数据() As BMP扫描行类型         '位图数据,合并为每个像素一个long值
End Type


'句扟椀BitCount=1时,8个像素占1个字节;
'句扟椀BitCount=4时,2个像素占1个字节;
'句扟椀BitCount=8时,1个像素占1个字节;
'句扟椀BitCount=24时,1个像素占3个字节;
'埥椀渀搀漀眀猀规定一个扫描行所占的字节数必须是
'4的倍数(即以long为单位),不足的以0填充,
'一个扫描行所占的字节数计算方法:
'DataSizePerLine= (biWidth* biBitCount+31)/8;
'// 一个扫描行所占的字节数
'DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数
'位图数据的大小(不压缩情况下):
'DataSize= DataSizePerLine* biHeight;


Public Function openbmp(Bmpfile As String, ByRef BMP文件 As BMP文件类型) As Integer
'打开BMP文件,读取数据
If Dir(Bmpfile) <> "" Then
Dim fj As Long
Dim i As Long
Dim colortmp() As Long
Dim 扫描行 As Long, 保留 As Long


With BMP文件
    fj = FreeFile()
    Open Bmpfile For Binary As #fj
        Get #fj, , .文件标识        '读文件标识
        If .文件标识.文件类型标识 = "BM" Then   '是BMP文件否
            Get #fj, , .位图信息
                ReDim .数据(.位图信息.图像高 - 1)
                
                扫描行 = (.位图信息.图像宽 * .位图信息.色彩位数) / 8
                保留 = 4 - (扫描行 Mod 4)
                For i = 0 To .位图信息.图像高 - 1
                    ReDim .数据(i).X(扫描行 - 1)
                    If 保留 > 0 And 保留 < 4 Then
                        ReDim .数据(i).空(保留 - 1)
                    End If
                Next i
            
                Select Case .位图信息.色彩位数
                    Case 1                  '2色图片
                        ReDim .颜色表(1)        '初始化颜色表数据
                        Get #fj, , .颜色表      '读颜色表
                        For i = 0 To .位图信息.图像高 - 1
                            Get #fj, , .数据(i).X
                            Get #fj, , .数据(i).空
                        Next i
                    Case 4                  '16色图片
                        ReDim .颜色表(15)       '初始化颜色表数据
                        Get #fj, , .颜色表      '读颜色表
                        For i = 0 To .位图信息.图像高 - 1
                            Get #fj, , .数据(i).X
                            Get #fj, , .数据(i).空
                        Next i
                    Case 8                  '256色图片
                        ReDim .颜色表(255)      '初始化颜色表数据
                        Get #fj, , .颜色表      '读颜色表
                        
                        For i = 0 To .位图信息.图像高 - 1
                            Get #fj, , .数据(i).X
                            Get #fj, , .数据(i).空
                        Next i
                        
                    Case 24                  '真彩图片,无颜色表
                        'i = (.位图信息.图像宽 - 1) * (.位图信息.图像高 - 1)
                        'ReDim .数据(i)
                        'ReDim .数据(.位图信息.图像宽, .位图信息.图像高, 2)
                        For i = 0 To .位图信息.图像高 - 1
                            Get #fj, , .数据(i).X
                            Get #fj, , .数据(i).空
                        Next i
                End Select
            
        Else        '文件标识不对,打开失败
            openbmp = -2
        End If
    Close #fj
End With
Else    '文件不存在,打开失败
    openbmp = -1
End If
End Function

Public Function viewbmp(BMP文件 As BMP文件类型, PIC As PictureBox) As Integer

Dim i As Long, j As Long, k As Long, n As Byte
Dim i1 As Integer, i2 As Integer
Dim ycon() As Long


With BMP文件
PIC.Cls
If .位图信息.色彩位数 < 24 Then
    i1 = .位图信息.色彩位数 ^ 2
    ReDim ycon(i1)
    For i = 0 To i1
        ycon(i) = RGB(.颜色表(i).红, .颜色表(i).绿, .颜色表(i).蓝)
    Next i
End If
For i = 0 To .位图信息.图像高 - 1
'    For j = 1 To .位图信息.图像高
        Select Case .位图信息.色彩位数
        Case 1
            For j = 0 To (.位图信息.图像宽 / 8)
                For k = 0 To 7
                    n = 2 ^ (7 - k)
                    If j * 8 + k < .位图信息.图像宽 Then
                        i1 = .数据(i).X(j) And n / n        '第n位
                        PIC.PSet (j * 8 + k, .位图信息.图像高 - i), ycon(i1)
                    End If
                Next k
            Next j
        
        Case 4
            For j = 0 To (.位图信息.图像宽 / 2) - 1
                i1 = .数据(i).X(j) \ 16        '高位
                i2 = .数据(i).X(j) Mod 16      '低位
                PIC.PSet (j * 2, .位图信息.图像高 - i), ycon(i1)
                PIC.PSet (j * 2 + 1, .位图信息.图像高 - i), ycon(i2)
            Next j
            If j * 2 < .位图信息.图像宽 Then        '还少了一点
                i1 = .数据(i).X(j) \ 16        '高位
                PIC.PSet (j * 2, .位图信息.图像高 - i), ycon(i1)
            End If
        
        Case 8
            For j = 0 To .位图信息.图像宽 - 1
                PIC.PSet (j, .位图信息.图像高 - i), ycon(.数据(i).X(j))
            Next j
        
        Case 24
            For j = 0 To .位图信息.图像宽 - 1
                PIC.PSet (j, .位图信息.图像高 - i), RGB(.数据(i).X(j * 3 + 2), .数据(i).X(j * 3 + 1), .数据(i).X(j * 3 + 0))
            Next j
'    Next j
        End Select
Next i
End With
End Function


以前写的,只有读取,显示 二个部分,没有保存。

授人于鱼,不如授人于渔
早已停用QQ了
2015-10-29 11:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
不支持压缩 BMP 的读取。

授人于鱼,不如授人于渔
早已停用QQ了
2015-10-29 11:16
caivsi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-17
收藏
得分:0 
非常感谢大家的回复,受益匪浅,谁有vb通过二进制生成图像的代码吗?
2015-10-29 11:52
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
是随机图像,还是指定的图像。

随机图像,BMP,可以按我上面的代码,然后先填充图像头,然后再按图像头的大小,生成扫描行数组,再随机填充数据进去。
保存时,可以把图像显示出来,然后使用 savepicture 存盘。

指定的图像。
这个你就要精通数学了,先创建 结构,填充图像头,生成扫描行数组,再计算那个点应该是什么颜色,把这个颜色写到 指定扫描行的指定元素中去。
建议使用 8位颜色来做,如果8位色,就要先生成颜色表。主要是找元素方便一点,8位色中,每一个点在数组中,占1个字节,也就是一个元素,而真彩要占3字节。


授人于鱼,不如授人于渔
早已停用QQ了
2015-10-31 17:57
天下苍生
Rank: 2
等 级:论坛游民
帖 子:24
专家分:52
注 册:2015-10-14
收藏
得分:7 
学习了
2015-11-01 09:48
xhk32067
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-11-15
收藏
得分:0 
用汉字做变量名,还有点不习惯
2015-11-15 19:50
快速回复:vb 读取图像文件(jpg或bmp等都行)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048347 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved