一 : 新一代小米插线板正式发布 功能更加强大 触控开关
昨天晚上,小米插线板的研发方青米科技宣布将于明天上午9点推出新一代小米插线板,并表示这是"进化/归来"。这意味着,新一代小米插线板在功能上应该会更全面。
另外,考虑到小米智能家庭将在明天上午众筹一款新品,而且和电有关,所以这次众筹的主角很有可能就是青米科技这款全新的插线板。
如昨晚的预告,今天上午,小米生态链企业青米科技今天上午正式公布了新一代小米插线板,功能更加强大,号称“不变的颜值,更智能的插线板”。
此次公布的新款小米插线板是5孔位版本,不带USB接口(USB口版本预计很快就会发布)。外观方面和上一代产品类似,但原来的物理电源开关键变成了圆形(触控开关),插线板边缘也似乎更加圆润。
功能方面,新款小米插线板支持过载保护,通过mcu判断功耗大小,当功耗超过阀值,立即断开继电器,起到过载保护的作用。排除故障后,可手动回复或通过APP恢复正常工作状态。
此外,新插线板还支持漏电监测、节能、触控开关、定时计时、电力计量、自动学习等功能。
目前,新款小米插线板的售价、开售日期暂未公布。上一代的售价分别为39元、49元(USB版),大家猜猜新款会卖多少钱?
相关阅读:小米新品39元插线板和49元有什么区别? 小米39元插线板拆解图


二 : PhotoShop的自动色阶功能的实现
示例工程:http://files.cnblogs.com/laviewpbt/AutoLevel.rar.
      关于自动色阶,用过PS的人应该都对他有所了解,在调整图像的视觉效果上这个调整滤镜的使用频率也是相当高的。[www.61k.com]关于其实现原理,网络上亦已经有不少人对其进行了探讨和研究,这里只是再简单的给有兴趣的人复习一下。 
      首先计算出一副图像的直方图,也就是每个色阶(0~255)所对应的像素点的个数,然后沿0阶->255阶方向找到最小色阶点Min(所谓最小色阶点即第一个在某一阶上有点数出现的阶数,如在0阶时为0点,1阶时为0点,2阶也为0点,3阶为10点,4阶为5点,...,那么最小点应为3阶), 同样最大值则是反方向从255阶开始第一个在某一阶上有点数出现的阶数Max.一般来讲,对以彩色图像最小色阶点=0,而最大色阶点为255。然后从最小色阶点开始选择整个图像总点数的5.5%的那一点做为新的最小点NewMin,再沿相反方向(即255阶->0阶方向)选择整个图像总点数的5.5%的那一点做为新的最大点NewMax,计两者之差为Differ,则每以原始像素点对应的新值可以按如下算法计算:
If Color <= NewMin Then
  Color = 0
ElseIf Color >= NewMax Then
  Color = 255
Else
  Color = (Color - NewMin) * 255 / Differ
End If 
      这里我们假设你已经加载了一副24位真彩色图像到一个叫做Pic的图像容器中,并且为了方便我们设置其AutoRedraw为True,现在我们要对这副图像进行自动色阶的调整,除此之外,我们还希望处理的速度越快越好,首先我们请VB自带的Point和Pset函数站到一边去,他们处于图像处理的最低层(注意,不是最底层哦),接着,我们还要放弃对SetPixel和GetPixel的钟爱,因为他们和Point之流是一丘之貉。下一步,将目光瞄准GetBitmapBits和SetBitmapBits,哇,好名字,确实,这两个函数功能强大,但是我们不需要他们,因为他们是设备相关的,我不希望在我机器上能正常运行的程序在别人电脑上出现莫名其妙的效果。OK,还是请设备无关的函数GetDIBits,SetDIBits出山吧。关于这两个函数的使用方法,我不想详谈,但是你们可以记住,我们调用他们只是想快速的获得图像的点阵数据而已。 
为了大家理解方便,这里我们设置图像的数据为一二维的RGBQUAD结构体,该结构体由四个分量组成,分别表示了颜色空间的Red,Green,Blue,Alpha分量(有的地方最后一个变量名为Reserved,但这不妨碍我们)。其中的Alpha因为VB的StdPicture对象不支持,我们不予以关心。
 
     
      好了,下面给出获取PictureBox控件中图像数据的函数,以及怎么样把图像数据绘制到PictureBox中去。
模块中的代码: 

 DIB版本自动色阶
DIB版本自动色阶 Option Explicit
Option Explicit 
 '***************************模仿PS的自动色阶功能*********************************
'***************************模仿PS的自动色阶功能*********************************  '**  作者          :      laviewpbt
'**  作者          :      laviewpbt  '**  开发时间      :      2008.7.1
'**  开发时间      :      2008.7.1  '**  最后修改时间  :      2008.8.28
'**  最后修改时间  :      2008.8.28  '**  联系方式      :      QQ:33184777
'**  联系方式      :      QQ:33184777  '**  E-MAIL      :      laviewpbt@sina.com
'**  E-MAIL      :      laviewpbt@sina.com  '**  All Rights Resered
'**  All Rights Resered  '***********************************************************************
'*********************************************************************** 
 Public Type BITMAPFILEHEADER
Public Type BITMAPFILEHEADER 
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 bfType      As Integer
    bfType      As Integer  bfSize      As Long
    bfSize      As Long  bfReserved1 As Integer
    bfReserved1 As Integer  bfReserved2 As Integer
    bfReserved2 As Integer  bfOffBits  As Long
    bfOffBits  As Long  End Type
End Type 
 Public Type Bitmap
Public Type Bitmap  bmType As Long
  bmType As Long  bmWidth As Long
  bmWidth As Long  bmHeight As Long
  bmHeight As Long  bmWidthBytes As Long
  bmWidthBytes As Long  bmPlanes As Integer
  bmPlanes As Integer  bmBitsPixel As Integer
  bmBitsPixel As Integer  bmBits As Long
  bmBits As Long  End Type
End Type 
 Public Type BITMAPINFOHEADER      '40 bytes
Public Type BITMAPINFOHEADER      '40 bytes  biSize As Long                  'BITMAPINFOHEADER结构的大小
  biSize As Long                  'BITMAPINFOHEADER结构的大小  biWidth As Long
  biWidth As Long  biHeight As Long
  biHeight As Long  biPlanes As Integer              '设备的为平面数,现在都是1
  biPlanes As Integer              '设备的为平面数,现在都是1  biBitCount As Integer            '图像的颜色位图
  biBitCount As Integer            '图像的颜色位图  biCompression As Long            '压缩方式
  biCompression As Long            '压缩方式  biSizeImage As Long              '实际的位图数据所占字节
  biSizeImage As Long              '实际的位图数据所占字节  biXPelsPerMeter As Long          '目标设备的水平分辨率
  biXPelsPerMeter As Long          '目标设备的水平分辨率  biYPelsPerMeter As Long          '目标设备的垂直分辨率
  biYPelsPerMeter As Long          '目标设备的垂直分辨率 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 biClrUsed As Long                '使用的颜色数
  biClrUsed As Long                '使用的颜色数  biClrImportant As Long           '重要的颜色数。如果该项为0,表示所有颜色都是重要的
  biClrImportant As Long           '重要的颜色数。如果该项为0,表示所有颜色都是重要的  End Type
End Type  
   Public Type RGBQUAD               '只有bibitcount为1,2,4时才有调色板
Public Type RGBQUAD               '只有bibitcount为1,2,4时才有调色板  Blue As Byte                    '蓝色分量
  Blue As Byte                    '蓝色分量  Green As Byte                   '绿色分量
  Green As Byte                   '绿色分量  Red As Byte                     '红色分量
  Red As Byte                     '红色分量  Reserved As Byte                '保留值
  Reserved As Byte                '保留值  End Type
End Type 
 Public Type BITMAPINFO
Public Type BITMAPINFO  bmiHeader As BITMAPINFOHEADER
  bmiHeader As BITMAPINFOHEADER  bmiColors As RGBQUAD
  bmiColors As RGBQUAD  End Type
End Type 
 Public Const BI_RGB = 0&
Public Const BI_RGB = 0&  Public Const DIB_RGB_COLORS = 0&
Public Const DIB_RGB_COLORS = 0&  Public Const IMAGE_BITMAP = 0&
Public Const IMAGE_BITMAP = 0& 

 Public Declare Function GetDIBits()Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Public Declare Function GetDIBits()Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long 
 Public Declare Function GetGDIObject()Function GetGDIObject Lib "gdi32.dll" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long
Public Declare Function GetGDIObject()Function GetGDIObject Lib "gdi32.dll" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long 
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 Public Declare Function SetDIBits()Function SetDIBits Lib "gdi32" (ByVal Hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Public Declare Function SetDIBits()Function SetDIBits Lib "gdi32" (ByVal Hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long 
 Public Declare Function GetTickCount()Function GetTickCount Lib "kernel32" () As Long
Public Declare Function GetTickCount()Function GetTickCount Lib "kernel32" () As Long 
 Public Declare Sub CopyMemory()Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long)
Public Declare Sub CopyMemory()Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long) 
 Public Declare Function VarPtrArray()Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
Public Declare Function VarPtrArray()Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long 

 '得到图像数据
'得到图像数据 
 Public Function GetPicData()Function GetPicData(Pic As PictureBox, PicData() As RGBQUAD) As Boolean       '读取位图数据
Public Function GetPicData()Function GetPicData(Pic As PictureBox, PicData() As RGBQUAD) As Boolean       '读取位图数据  Dim Bmp As Bitmap, BmpInfo As BITMAPINFO
    Dim Bmp As Bitmap, BmpInfo As BITMAPINFO  GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp '取得对指定对象进行说明的一个结构,
   GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp '取得对指定对象进行说明的一个结构,  'hobject为位图,刷子等的句柄,
                                                         'hobject为位图,刷子等的句柄,  'count欲取回的字节数。通常是由lpObject定义的那个结构的长度
                                                         'count欲取回的字节数。通常是由lpObject定义的那个结构的长度  
     With BmpInfo.bmiHeader
    With BmpInfo.bmiHeader  .biSize = Len(BmpInfo.bmiHeader)
        .biSize = Len(BmpInfo.bmiHeader)  .biWidth = Bmp.bmWidth
        .biWidth = Bmp.bmWidth  .biHeight = -Bmp.bmHeight                'BMP位图默认的扫描方式是从下到上,
        .biHeight = -Bmp.bmHeight                'BMP位图默认的扫描方式是从下到上, 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 '这与GDI的坐标系统相反,为方便,这里
                                                        '这与GDI的坐标系统相反,为方便,这里  '改为-值,则取得数据就是以左上角为起点
                                                        '改为-值,则取得数据就是以左上角为起点  .biPlanes = 1
        .biPlanes = 1  .biBitCount = 32                         '32位位图,默认情况下Windows不会处理最高8位
        .biBitCount = 32                         '32位位图,默认情况下Windows不会处理最高8位  '可以将它作为自己的Alpha通道,取为32位位图,
                                                        '可以将它作为自己的Alpha通道,取为32位位图,  '虽然多占用了点内存,但是避免了扫描行宽度问题,代码易于理解
                                                        '虽然多占用了点内存,但是避免了扫描行宽度问题,代码易于理解  .biCompression = BI_RGB                        '无压缩
        .biCompression = BI_RGB                        '无压缩  .biSizeImage = Bmp.bmWidth * Bmp.bmHeight * 4
        .biSizeImage = Bmp.bmWidth * Bmp.bmHeight * 4  End With
    End With  ReDim PicData(0 To Bmp.bmWidth - 1, 0 To Bmp.bmHeight - 1) As RGBQUAD
    ReDim PicData(0 To Bmp.bmWidth - 1, 0 To Bmp.bmHeight - 1) As RGBQUAD  GetDIBits Pic.Hdc, Pic.Image, 0, Bmp.bmHeight, PicData(0, 0), BmpInfo, DIB_RGB_COLORS
    GetDIBits Pic.Hdc, Pic.Image, 0, Bmp.bmHeight, PicData(0, 0), BmpInfo, DIB_RGB_COLORS  End Function
End Function 

 '根据数组显示图像
'根据数组显示图像 
 Public Sub SetPicData()Sub SetPicData(Pic As PictureBox, PicData() As RGBQUAD)          '显示位图
Public Sub SetPicData()Sub SetPicData(Pic As PictureBox, PicData() As RGBQUAD)          '显示位图  Dim Bmp As Bitmap, BmpInfo As BITMAPINFO
    Dim Bmp As Bitmap, BmpInfo As BITMAPINFO 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp          '取得对指定对象进行说明的一个结构,hobject为位图,刷子等的句柄,count欲取回的字节数。通常是由lpObject定义的那个结构的长度
    GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp          '取得对指定对象进行说明的一个结构,hobject为位图,刷子等的句柄,count欲取回的字节数。通常是由lpObject定义的那个结构的长度  With BmpInfo.bmiHeader
    With BmpInfo.bmiHeader  .biSize = Len(BmpInfo.bmiHeader)
        .biSize = Len(BmpInfo.bmiHeader)  .biWidth = Bmp.bmWidth
        .biWidth = Bmp.bmWidth  .biHeight = -Bmp.bmHeight                'BMP位图默认的扫描方式是从下到上,
        .biHeight = -Bmp.bmHeight                'BMP位图默认的扫描方式是从下到上,  '这与GDI的坐标系统相反,为方便,这里
                                                        '这与GDI的坐标系统相反,为方便,这里  '改为-值,则取得数据就是以左上角为起点
                                                        '改为-值,则取得数据就是以左上角为起点  .biPlanes = 1
        .biPlanes = 1  .biBitCount = 32                          '32位位图,默认情况下Windows不会处理最高8位
       .biBitCount = 32                          '32位位图,默认情况下Windows不会处理最高8位  '可以将它作为自己的Alpha通道,取为32位位图,
                                                        '可以将它作为自己的Alpha通道,取为32位位图,  '虽然多占用了点内存,但是避免了扫描行宽度问题,代码易于理解
                                                        '虽然多占用了点内存,但是避免了扫描行宽度问题,代码易于理解  .biCompression = BI_RGB                   '无压缩
        .biCompression = BI_RGB                   '无压缩  .biSizeImage = Bmp.bmWidth * Bmp.bmHeight * 4
        .biSizeImage = Bmp.bmWidth * Bmp.bmHeight * 4  End With
    End With  SetDIBits Pic.Hdc, Pic.Image, 0, Bmp.bmHeight, PicData(0, 0), BmpInfo, DIB_RGB_COLORS
    SetDIBits Pic.Hdc, Pic.Image, 0, Bmp.bmHeight, PicData(0, 0), BmpInfo, DIB_RGB_COLORS  Pic.Refresh
    Pic.Refresh 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 End Sub
End Sub 
    以上的SetPicData和GetPicData分别为图像数据显示和读取函数,这里的.biBitCount = 32选择为32位虽然加大了内存的占用量,但是确在一定程度上方便了编程,因为Windows下的位图对象是要求扫描行对齐的,也就是说一行像素的占用字节数必须是4的倍数,之所以这样,我想是因为32位的Windows系统处理4个字节的速度最快吧。
窗体中有三个按钮一个图片框,图片框中请在设计的时候加载一副图像及设置相关参数。 
      窗体代码

 DIB版本自动色阶
DIB版本自动色阶 Option Explicit
Option Explicit 

 Private m_Width        As Long            '打开的图像的宽度
Private m_Width        As Long            '打开的图像的宽度  Private m_Height        As Long            '打开的图像的高度
Private m_Height        As Long            '打开的图像的高度 


 Private Sub Form_Load()Sub Form_Load()
Private Sub Form_Load()Sub Form_Load()  m_Width = Pic.ScaleWidth
    m_Width = Pic.ScaleWidth  m_Height = Pic.ScaleHeight
    m_Height = Pic.ScaleHeight  End Sub
End Sub 


 Private Sub CmdOpen_Click()Sub CmdOpen_Click()
Private Sub CmdOpen_Click()Sub CmdOpen_Click()  CommonDialog.FileName = ""
    CommonDialog.FileName = ""  CommonDialog.Filter = "All Suppported Images |*.bmp;*.jpg;*.gif;|BMP Images|*.bmp|JPG Images|*.jpg|Gif Images|*.gif"
    CommonDialog.Filter = "All Suppported Images |*.bmp;*.jpg;*.gif;|BMP Images|*.bmp|JPG Images|*.jpg|Gif Images|*.gif"  CommonDialog.ShowOpen
    CommonDialog.ShowOpen  If CommonDialog.FileName <> "" Then
    If CommonDialog.FileName <> "" Then  Pic.Picture = LoadPicture(CommonDialog.FileName)
        Pic.Picture = LoadPicture(CommonDialog.FileName)  m_Width = Pic.ScaleWidth
        m_Width = Pic.ScaleWidth  m_Height = Pic.ScaleHeight
        m_Height = Pic.ScaleHeight 
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 End If
    End If  End Sub
End Sub 


 Private Sub CmdDib_Click()Sub CmdDib_Click()
Private Sub CmdDib_Click()Sub CmdDib_Click()  Dim T              As Long
    Dim T              As Long  
     Dim PicData()          As RGBQUAD
    Dim PicData()          As RGBQUAD  Dim i                  As Long, j                      As Long
    Dim i                  As Long, j                      As Long 
 Dim HistRed(255)        As Long, HistGreen(255)        As Long
    Dim HistRed(255)        As Long, HistGreen(255)        As Long  Dim HistBlue(255)      As Long
    Dim HistBlue(255)      As Long  Dim DiffRed            As Long, DiffGreen              As Long
    Dim DiffRed            As Long, DiffGreen              As Long  Dim DiffBlue            As Long, Diff                  As Long
    Dim DiffBlue            As Long, Diff                  As Long  Dim SpeedRed(255)      As Byte, SpeedGreen(255)        As Byte
    Dim SpeedRed(255)      As Byte, SpeedGreen(255)        As Byte  Dim SpeedBlue(255)      As Byte, Speed(255)            As Byte
    Dim SpeedBlue(255)      As Byte, Speed(255)            As Byte  Dim Sum                As Long, Integral              As Long
    Dim Sum                As Long, Integral              As Long  Dim Min                As Long, Max                    As Long
    Dim Min                As Long, Max                    As Long  Dim NewMin              As Long, NewMax                As Long
    Dim NewMin              As Long, NewMax                As Long 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 T = GetTickCount
    T = GetTickCount  GetPicData Pic, PicData
    GetPicData Pic, PicData  
     
     For i = 0 To m_Width - 1
    For i = 0 To m_Width - 1  For j = 0 To m_Height - 1
        For j = 0 To m_Height - 1  HistRed(PicData(i, j).Red) = HistRed(PicData(i, j).Red) + 1
            HistRed(PicData(i, j).Red) = HistRed(PicData(i, j).Red) + 1  HistGreen(PicData(i, j).Green) = HistGreen(PicData(i, j).Green) + 1
            HistGreen(PicData(i, j).Green) = HistGreen(PicData(i, j).Green) + 1  HistBlue(PicData(i, j).Blue) = HistBlue(PicData(i, j).Blue) + 1
            HistBlue(PicData(i, j).Blue) = HistBlue(PicData(i, j).Blue) + 1  Next
        Next  Next
    Next  
   For i = 0 To 255
    For i = 0 To 255  If HistRed(i) <> 0 Then
        If HistRed(i) <> 0 Then  Min = i
            Min = i  Exit For
            Exit For  End If
        End If  Next
    Next  For i = 255 To 0 Step -1
    For i = 255 To 0 Step -1  If HistRed(i) <> 0 Then
        If HistRed(i) <> 0 Then  Max = i
            Max = i  Exit For
            Exit For  End If
        End If  Next
    Next  
     Sum = 0
    Sum = 0 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 For i = Min To Max
    For i = Min To Max  Sum = Sum + HistRed(i)
        Sum = Sum + HistRed(i)  Next
    Next  
     Integral = 0
    Integral = 0  For i = Min To Max
    For i = Min To Max  Integral = Integral + HistRed(i)
        Integral = Integral + HistRed(i)  If Integral >= Sum * 0.005 Then
        If Integral >= Sum * 0.005 Then  NewMin = i
            NewMin = i  Exit For
            Exit For  End If
        End If  Next
    Next  For i = NewMin + 1 To Max
    For i = NewMin + 1 To Max  Integral = Integral + HistRed(i)
        Integral = Integral + HistRed(i)  If Integral > Sum * 0.995 Then
        If Integral > Sum * 0.995 Then  NewMax = i
            NewMax = i  Exit For
            Exit For  End If
        End If  Next
    Next  
     For i = 0 To 255
    For i = 0 To 255  If i <= NewMin Then
        If i <= NewMin Then  SpeedRed(i) = 0
            SpeedRed(i) = 0  ElseIf i >= NewMax Then
        ElseIf i >= NewMax Then  SpeedRed(i) = 255
            SpeedRed(i) = 255  Else
        Else 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 SpeedRed(i) = (i - NewMin) / (NewMax - NewMin) * 255
            SpeedRed(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
        End If  Next
    Next 


 /**/''''''''''''''''''''''''''''
/**/''''''''''''''''''''''''''''  For i = 0 To 255
  For i = 0 To 255  If HistGreen(i) <> 0 Then
        If HistGreen(i) <> 0 Then  Min = i
            Min = i  Exit For
            Exit For  End If
        End If  Next
    Next  For i = 255 To 0 Step -1
    For i = 255 To 0 Step -1  If HistGreen(i) <> 0 Then
        If HistGreen(i) <> 0 Then  Max = i
            Max = i  Exit For
            Exit For  End If
        End If  Next
    Next  
     Sum = 0
    Sum = 0  For i = Min To Max
    For i = Min To Max  Sum = Sum + HistGreen(i)
        Sum = Sum + HistGreen(i)  Next
    Next  
     Integral = 0
    Integral = 0  For i = Min To Max
    For i = Min To Max  Integral = Integral + HistGreen(i)
        Integral = Integral + HistGreen(i) 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 If Integral >= Sum * 0.005 Then
        If Integral >= Sum * 0.005 Then  NewMin = i
            NewMin = i  Exit For
            Exit For  End If
        End If  Next
    Next  
     For i = NewMin + 1 To Max
    For i = NewMin + 1 To Max  Integral = Integral + HistGreen(i)
        Integral = Integral + HistGreen(i)  If Integral > Sum * 0.995 Then
        If Integral > Sum * 0.995 Then  NewMax = i
            NewMax = i  Exit For
            Exit For  End If
        End If  Next
    Next 
 For i = 0 To 255
    For i = 0 To 255  If i <= NewMin Then
        If i <= NewMin Then  SpeedGreen(i) = 0
            SpeedGreen(i) = 0  ElseIf i > NewMax Then
        ElseIf i > NewMax Then  SpeedGreen(i) = 255
            SpeedGreen(i) = 255  Else
        Else  SpeedGreen(i) = (i - NewMin) / (NewMax - NewMin) * 255
            SpeedGreen(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
        End If  Next
    Next 


 /**/'''''''''''''''''''''''''
/**/''''''''''''''''''''''''' 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪

 For i = 0 To 255
    For i = 0 To 255  If HistBlue(i) <> 0 Then
        If HistBlue(i) <> 0 Then  Min = i
            Min = i  Exit For
            Exit For  End If
        End If  Next
    Next  For i = 255 To 0 Step -1
    For i = 255 To 0 Step -1  If HistBlue(i) <> 0 Then
        If HistBlue(i) <> 0 Then  Max = i
            Max = i  Exit For
            Exit For  End If
        End If  Next
    Next  
     Sum = 0
    Sum = 0  For i = Min To Max
    For i = Min To Max  Sum = Sum + HistBlue(i)
        Sum = Sum + HistBlue(i)  Next
    Next  
     Integral = 0
    Integral = 0  For i = Min To Max
    For i = Min To Max  Integral = Integral + HistBlue(i)
        Integral = Integral + HistBlue(i)  If Integral >= Sum * 0.005 Then
        If Integral >= Sum * 0.005 Then  NewMin = i
            NewMin = i  Exit For
            Exit For  End If
        End If  Next
    Next 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 
     For i = NewMin + 1 To Max
    For i = NewMin + 1 To Max  Integral = Integral + HistBlue(i)
        Integral = Integral + HistBlue(i)  If Integral > Sum * 0.995 Then
        If Integral > Sum * 0.995 Then  NewMax = i
            NewMax = i  Exit For
            Exit For  End If
        End If  Next
    Next 
 For i = 0 To 255
    For i = 0 To 255  If i <= NewMin Then
        If i <= NewMin Then  SpeedBlue(i) = 0
            SpeedBlue(i) = 0  ElseIf i > NewMax Then
        ElseIf i > NewMax Then  SpeedBlue(i) = 255
            SpeedBlue(i) = 255  Else
        Else  SpeedBlue(i) = (i - NewMin) / (NewMax - NewMin) * 255
            SpeedBlue(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
        End If  Next
    Next  For i = 0 To m_Width - 1
    For i = 0 To m_Width - 1  For j = 0 To m_Height - 1
        For j = 0 To m_Height - 1  PicData(i, j).Red = SpeedRed(PicData(i, j).Red)
            PicData(i, j).Red = SpeedRed(PicData(i, j).Red)  PicData(i, j).Green = SpeedGreen(PicData(i, j).Green)
            PicData(i, j).Green = SpeedGreen(PicData(i, j).Green)  PicData(i, j).Blue = SpeedBlue(PicData(i, j).Blue)
            PicData(i, j).Blue = SpeedBlue(PicData(i, j).Blue)  Next
        Next  Next
    Next 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 SetPicData Pic, PicData
    SetPicData Pic, PicData  Me.Caption = "DIB方法用时" & GetTickCount - T & "毫秒"
    Me.Caption = "DIB方法用时" & GetTickCount - T & "毫秒"  End Sub
End Sub 
     好了,任务完成了,编译测试一下,勾选上所有的高级优化选项,测试图片大小选为1024*768,结果显示需要300ms,啊,如此慢,PS中一点就出来了效果呢,仔细分析下代码结构,似乎能够优化的地方已经基本优化了,那问题主要是那里呢。 
     其实,在这里耗时的几个主要过程有,读取图像数据、计算直方图、计算新的图像数据、显示图像数据,其中又以中间两个过程为主。我们采用了二维结构体数组,众所周知,访问数组需要计算数组元素在内存中位置,而维数越高,计算地址的公式就越复杂,因此,如果能采用一维数组的方式理论上是要比二维的速度有所改进的,这部分测试可以用读者自己完成。
    这里要说的是另外一种提速的方法,模拟指针。其实这个词有很多人应该见过很多次了。虽然VB不直接支持指针的操作,但是借助于安全数据的相关特性,我们可以实现类似于C的指针(包括功能和代码的编辑方式).那么这里我们用模拟指针的好处很明显。第一:我们不需要调用GetDIBits这个函数,这意味着两种节省,其一是空间上的,GetDIBits函数需要你为他事先分配好一定的内存空间来保存图像数据。但是实际上,图像已经被我们加载入picturebox中,那么在内存中他肯定已经占用了空间,我们可以利用GetGDIObject这个函数配以适当的参数得到这个内存空间的首地址。其二是时间上的,分配空间和填充数据都是耗时的,虽然这个时间很少。第二,可以减少寻址的时间消耗, 用模拟指针的过程也需要寻址。但是适当的利用中间变量保存相关地址,可以节省大量的计算时间,比如你用二维结构体保存图象数据,要得到图象在(i,j)点的红色和兰色和绿色数据,则要调用Data(i,j).Red和Data(i,j).Blue、Data(i,j).Green,这里三次调用则三次寻址,每次寻址的过程类似于下面的公式 j*width+i+Offset,一次乘法,二次加法,如果我们自己寻址,则用临时变量保存j*width+i值,则会减少计算量。对于大循环则更是明显。
    好了说了这么多,下面给出代码。

 模拟指针版自动色阶
模拟指针版自动色阶 '***************************自动色阶的模拟指针实现*********************************
'***************************自动色阶的模拟指针实现*********************************  '**  作者          :       laviewpbt
'**  作者          :       laviewpbt  '**  开发时间      :       2008.7.1
'**  开发时间      :       2008.7.1  '**  最后修改时间  :       2008.8.28
'**  最后修改时间  :       2008.8.28  '**  联系方式      :       QQ:33184777
'**  联系方式      :       QQ:33184777  '**  E-MAIL      :       laviewpbt@sina.com
'**  E-MAIL      :       laviewpbt@sina.com  '**  Blog          :     http://www.cnblogs.com/laviewpbt/
'**  Blog          :     http://www.cnblogs.com/laviewpbt/ '**  All Rights Resered,转载请保留以上信息
'**  All Rights Resered,转载请保留以上信息  '***********************************************************************
'*********************************************************************** 

 Private Sub CmdPointer_Click()Sub CmdPointer_Click()
Private Sub CmdPointer_Click()Sub CmdPointer_Click() 
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 Dim i                  As Long, j                  As Long
    Dim i                  As Long, j                  As Long  Dim DataArr(0 To 3)    As Byte, pDataArr(0 To 0)  As Long
    Dim DataArr(0 To 3)    As Byte, pDataArr(0 To 0)  As Long  Dim OldArrPtr          As Long, OldpArrPtr        As Long
    Dim OldArrPtr          As Long, OldpArrPtr        As Long  Dim LineAddBytes        As Long, PixelAddBytes      As Long
    Dim LineAddBytes        As Long, PixelAddBytes      As Long  Dim Bmp                As Bitmap, T                As Long
    Dim Bmp                As Bitmap, T                As Long  
                     Dim HistRed(255)        As Long, HistGreen(255)        As Long
    Dim HistRed(255)        As Long, HistGreen(255)        As Long  Dim HistBlue(255)      As Long
    Dim HistBlue(255)      As Long  Dim DiffRed            As Long, DiffGreen              As Long
    Dim DiffRed            As Long, DiffGreen              As Long  Dim DiffBlue            As Long, Diff                  As Long
    Dim DiffBlue            As Long, Diff                  As Long  Dim SpeedRed(255)      As Byte, SpeedGreen(255)        As Byte
    Dim SpeedRed(255)      As Byte, SpeedGreen(255)        As Byte  Dim SpeedBlue(255)      As Byte, Speed(255)            As Byte
    Dim SpeedBlue(255)      As Byte, Speed(255)            As Byte  Dim Sum                As Long, Integral              As Long
    Dim Sum                As Long, Integral              As Long  Dim Min                As Long, Max                    As Long
    Dim Min                As Long, Max                    As Long  Dim NewMin              As Long, NewMax                As Long
    Dim NewMin              As Long, NewMax                As Long 
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 T = GetTickCount
    T = GetTickCount  
     GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp
    GetGDIObject Pic.Picture.Handle, Len(Bmp), Bmp  If Bmp.bmBits <> 0 Then                            '是个有效的图片
    If Bmp.bmBits <> 0 Then                            '是个有效的图片  If Bmp.bmBitsPixel < 24 Then Exit Sub            '不处理费真彩色图像,实际上,VB的picture属性也支持8位索引色的Bmp,如果你为了节省内存,采用改格式的图片,可以自行修改代码。
        If Bmp.bmBitsPixel < 24 Then Exit Sub            '不处理费真彩色图像,实际上,VB的picture属性也支持8位索引色的Bmp,如果你为了节省内存,采用改格式的图片,可以自行修改代码。  MakePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr
        MakePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr  PixelAddBytes = Bmp.bmBitsPixel / 8                '可为3,可为4
        PixelAddBytes = Bmp.bmBitsPixel / 8                '可为3,可为4  pDataArr(0) = Bmp.bmBits                        '首地址
        pDataArr(0) = Bmp.bmBits                        '首地址  LineAddBytes = Bmp.bmWidthBytes - (Bmp.bmBitsPixel \ 8) * Bmp.bmWidth  '每个扫描行额外多出的字节
        LineAddBytes = Bmp.bmWidthBytes - (Bmp.bmBitsPixel \ 8) * Bmp.bmWidth  '每个扫描行额外多出的字节  
     For j = 1 To m_Height
        For j = 1 To m_Height  For i = 1 To m_Width
            For i = 1 To m_Width  HistRed(DataArr(2)) = HistRed(DataArr(2)) + 1
                HistRed(DataArr(2)) = HistRed(DataArr(2)) + 1  HistGreen(DataArr(1)) = HistGreen(DataArr(1)) + 1
                HistGreen(DataArr(1)) = HistGreen(DataArr(1)) + 1  HistBlue(DataArr(0)) = HistBlue(DataArr(0)) + 1
                HistBlue(DataArr(0)) = HistBlue(DataArr(0)) + 1  pDataArr(0) = pDataArr(0) + PixelAddBytes
                pDataArr(0) = pDataArr(0) + PixelAddBytes  Next
            Next  pDataArr(0) = pDataArr(0) + LineAddBytes
            pDataArr(0) = pDataArr(0) + LineAddBytes  Next
        Next  
      扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 For i = 0 To 255
        For i = 0 To 255  If HistRed(i) <> 0 Then
            If HistRed(i) <> 0 Then  Min = i
                Min = i  Exit For
                Exit For  End If
            End If  Next
        Next  For i = 255 To 0 Step -1
        For i = 255 To 0 Step -1  If HistRed(i) <> 0 Then
            If HistRed(i) <> 0 Then  Max = i
                Max = i  Exit For
                Exit For  End If
            End If  Next
        Next  
         Sum = 0
        Sum = 0  For i = Min To Max
        For i = Min To Max  Sum = Sum + HistRed(i)
            Sum = Sum + HistRed(i)  Next
        Next  
         Integral = 0
        Integral = 0  For i = Min To Max
        For i = Min To Max  Integral = Integral + HistRed(i)
            Integral = Integral + HistRed(i)  If Integral >= Sum * 0.005 Then
            If Integral >= Sum * 0.005 Then  NewMin = i
                NewMin = i  Exit For
                Exit For 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 End If
            End If  Next
        Next  For i = NewMin + 1 To Max
        For i = NewMin + 1 To Max  Integral = Integral + HistRed(i)
            Integral = Integral + HistRed(i)  If Integral > Sum * 0.995 Then
            If Integral > Sum * 0.995 Then  NewMax = i
                NewMax = i  Exit For
                Exit For  End If
            End If  Next
        Next  
         For i = 0 To 255
        For i = 0 To 255  If i <= NewMin Then
            If i <= NewMin Then  SpeedRed(i) = 0
                SpeedRed(i) = 0  ElseIf i >= NewMax Then
            ElseIf i >= NewMax Then  SpeedRed(i) = 255
                SpeedRed(i) = 255  Else
            Else  SpeedRed(i) = (i - NewMin) / (NewMax - NewMin) * 255
                SpeedRed(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
            End If  Next
        Next  
     
    
 /**/''''''''''''''''''''''''''''
    /**/''''''''''''''''''''''''''''  For i = 0 To 255
      For i = 0 To 255 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 If HistGreen(i) <> 0 Then
            If HistGreen(i) <> 0 Then  Min = i
                Min = i  Exit For
                Exit For  End If
            End If  Next
        Next  For i = 255 To 0 Step -1
        For i = 255 To 0 Step -1  If HistGreen(i) <> 0 Then
            If HistGreen(i) <> 0 Then  Max = i
                Max = i  Exit For
                Exit For  End If
            End If  Next
        Next  
         Sum = 0
        Sum = 0  For i = Min To Max
        For i = Min To Max  Sum = Sum + HistGreen(i)
            Sum = Sum + HistGreen(i)  Next
        Next  
         Integral = 0
        Integral = 0  For i = Min To Max
        For i = Min To Max  Integral = Integral + HistGreen(i)
            Integral = Integral + HistGreen(i)  If Integral >= Sum * 0.005 Then
            If Integral >= Sum * 0.005 Then  NewMin = i
                NewMin = i  Exit For
                Exit For  End If
            End If 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 Next
        Next  
         For i = NewMin + 1 To Max
        For i = NewMin + 1 To Max  Integral = Integral + HistGreen(i)
            Integral = Integral + HistGreen(i)  If Integral > Sum * 0.995 Then
            If Integral > Sum * 0.995 Then  NewMax = i
                NewMax = i  Exit For
                Exit For  End If
            End If  Next
        Next  
     For i = 0 To 255
        For i = 0 To 255  If i <= NewMin Then
            If i <= NewMin Then  SpeedGreen(i) = 0
                SpeedGreen(i) = 0  ElseIf i > NewMax Then
            ElseIf i > NewMax Then  SpeedGreen(i) = 255
                SpeedGreen(i) = 255  Else
            Else  SpeedGreen(i) = (i - NewMin) / (NewMax - NewMin) * 255
                SpeedGreen(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
            End If  Next
        Next 


 /**/'''''''''''''''''''''''''
/**/''''''''''''''''''''''''' 
 For i = 0 To 255
        For i = 0 To 255 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 If HistBlue(i) <> 0 Then
            If HistBlue(i) <> 0 Then  Min = i
                Min = i  Exit For
                Exit For  End If
            End If  Next
        Next  For i = 255 To 0 Step -1
        For i = 255 To 0 Step -1  If HistBlue(i) <> 0 Then
            If HistBlue(i) <> 0 Then  Max = i
                Max = i  Exit For
                Exit For  End If
            End If  Next
        Next  
         Sum = 0
        Sum = 0  For i = Min To Max
        For i = Min To Max  Sum = Sum + HistBlue(i)
            Sum = Sum + HistBlue(i)  Next
        Next  
         Integral = 0
        Integral = 0  For i = Min To Max
        For i = Min To Max  Integral = Integral + HistBlue(i)
            Integral = Integral + HistBlue(i)  If Integral >= Sum * 0.005 Then
            If Integral >= Sum * 0.005 Then  NewMin = i
                NewMin = i  Exit For
                Exit For  End If
            End If 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 Next
        Next  
         For i = NewMin + 1 To Max
        For i = NewMin + 1 To Max  Integral = Integral + HistBlue(i)
            Integral = Integral + HistBlue(i)  If Integral > Sum * 0.995 Then
            If Integral > Sum * 0.995 Then  NewMax = i
                NewMax = i  Exit For
                Exit For  End If
            End If  Next
        Next  
     For i = 0 To 255
        For i = 0 To 255  If i <= NewMin Then
            If i <= NewMin Then  SpeedBlue(i) = 0
                SpeedBlue(i) = 0  ElseIf i > NewMax Then
            ElseIf i > NewMax Then  SpeedBlue(i) = 255
                SpeedBlue(i) = 255  Else
            Else  SpeedBlue(i) = (i - NewMin) / (NewMax - NewMin) * 255
                SpeedBlue(i) = (i - NewMin) / (NewMax - NewMin) * 255  End If
            End If  Next
        Next  pDataArr(0) = Bmp.bmBits
        pDataArr(0) = Bmp.bmBits  For j = 1 To m_Height
        For j = 1 To m_Height  For i = 1 To m_Width
            For i = 1 To m_Width  DataArr(2) = SpeedRed(DataArr(2))
                DataArr(2) = SpeedRed(DataArr(2)) 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 DataArr(1) = SpeedGreen(DataArr(1))
                DataArr(1) = SpeedGreen(DataArr(1))  DataArr(0) = SpeedBlue(DataArr(0))
                DataArr(0) = SpeedBlue(DataArr(0))  pDataArr(0) = pDataArr(0) + PixelAddBytes
                pDataArr(0) = pDataArr(0) + PixelAddBytes  Next
            Next  pDataArr(0) = pDataArr(0) + LineAddBytes
            pDataArr(0) = pDataArr(0) + LineAddBytes  Next
        Next  FreePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr
        FreePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr  Pic.Refresh
        Pic.Refresh  End If
    End If  
             Me.Caption = "模拟指针用时" & GetTickCount - T & "毫秒"
    Me.Caption = "模拟指针用时" & GetTickCount - T & "毫秒" 
 End Sub
End Sub 

 Private Sub MakePoint()Sub MakePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByRef OldArrPtr As Long, ByRef OldpArrPtr As Long)
Private Sub MakePoint()Sub MakePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByRef OldArrPtr As Long, ByRef OldpArrPtr As Long)  Dim Temp As Long, TempPtr As Long
    Dim Temp As Long, TempPtr As Long  CopyMemory Temp, ByVal DataArrPtr, 4        '得到DataArrPtr的SAFEARRAY结构的地址
    CopyMemory Temp, ByVal DataArrPtr, 4        '得到DataArrPtr的SAFEARRAY结构的地址  Temp = Temp + 12                            '这个指针偏移12个字节后就是pvData指针
    Temp = Temp + 12                            '这个指针偏移12个字节后就是pvData指针  CopyMemory TempPtr, ByVal pDataArrPtr, 4    '得到pDataArrPtr的SAFEARRAY结构的地址
    CopyMemory TempPtr, ByVal pDataArrPtr, 4    '得到pDataArrPtr的SAFEARRAY结构的地址  TempPtr = TempPtr + 12                      '这个指针偏移12个字节后就是pvData指针
    TempPtr = TempPtr + 12                      '这个指针偏移12个字节后就是pvData指针  CopyMemory OldpArrPtr, ByVal TempPtr, 4    '保存旧地址
    CopyMemory OldpArrPtr, ByVal TempPtr, 4    '保存旧地址 扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
 CopyMemory ByVal TempPtr, Temp, 4          '使pDataArrPtr指向DataArrPtr的SAFEARRAY结构的pvData指针
    CopyMemory ByVal TempPtr, Temp, 4          '使pDataArrPtr指向DataArrPtr的SAFEARRAY结构的pvData指针  CopyMemory OldArrPtr, ByVal Temp, 4        '保存旧地址
    CopyMemory OldArrPtr, ByVal Temp, 4        '保存旧地址  End Sub
End Sub 


 Private Sub FreePoint()Sub FreePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByVal OldArrPtr As Long, ByVal OldpArrPtr As Long)
Private Sub FreePoint()Sub FreePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByVal OldArrPtr As Long, ByVal OldpArrPtr As Long)  Dim TempPtr As Long
    Dim TempPtr As Long  CopyMemory TempPtr, ByVal DataArrPtr, 4        '得到DataArrPtr的SAFEARRAY结构的地址
    CopyMemory TempPtr, ByVal DataArrPtr, 4        '得到DataArrPtr的SAFEARRAY结构的地址  CopyMemory ByVal (TempPtr + 12), OldArrPtr, 4  '恢复旧地址
    CopyMemory ByVal (TempPtr + 12), OldArrPtr, 4  '恢复旧地址  CopyMemory TempPtr, ByVal pDataArrPtr, 4        '得到pDataArrPtr的SAFEARRAY结构的地址
    CopyMemory TempPtr, ByVal pDataArrPtr, 4        '得到pDataArrPtr的SAFEARRAY结构的地址  CopyMemory ByVal (TempPtr + 12), OldpArrPtr, 4  '恢复旧地址
    CopyMemory ByVal (TempPtr + 12), OldpArrPtr, 4  '恢复旧地址  End Sub
End Sub 

      编译后测试,同样1024*768大小的图片,用模拟指针方法只需32ms左右,这个时间人是基本看不到延迟的。用VC的话也就在这个时间范围内。 
      怎么样,对VB的信心是不是又增加了不少,是的,VB一直是很优秀的。以前是,现在是,将来也是。 
示例工程中有部分代码和本文中给出的不一致,但这不影响大局。
'******************************你的评论是我发表文章的极大动力**'**************************
'***************************欢迎和你讨论图像技术问题:QQ 33184777************************
扩展:photoshop自动色阶 / photoshop色阶 / photoshop色阶在哪
三 : 成功,源自突破现实
在当今世界,没有一个人在世界上或者国家中的地位是指定的,也不会有永久的王。正如一个企业应在逆境中努力进取以求生存,在顺境中也应有足够的忧患意识,想要成功,想要保持成功者的地位,就必需要突破现实。
每一个成功者,或者基本上所有的成功人士,都经历过大量挫折才走到今天这个地位,“每一个成功的企业家都会有他成功的地方,每个失败的企业家都有他失败的理由。”所有的成功者都引领着自己的团队不断突破,但如果其中一个人停下脚步,坐享安乐,那么失败就离他不远了。这个方面最有力的例子就是当年的市场霸主诺基亚公司,当年他曾经雄霸了整个电子产品市场,拥有无人可比的市场创新能力,这源于它铭记于心的忧患意识,它从不满足现实所取得的成就,走在科技前沿。可现在,在身边已经难觅诺基亚的身影了,因为诺基亚公司在取得巨大成就后,便十分“傲慢”,没能赶上时代步伐,被日益强大的苹果三星,HTC踩在脚下,在三次大裁员仍未解决资金问题后,申请了破产保护,最终被微软收购。
因为忧患意识而取得成功的例子有很多,如苹果公司从1976年的默默无闻到现在人尽皆知的高端手机领导者,大量竞争对手使它充满忧患意识,激发了它创新的无限潜力,它不断突破现实,股价连连增长,已突破6000亿美元。确实,也必须承认,有些企业靠模仿也在这个市场上生存了下来,如在Iphone5上市,十天后夏星公司和AWP公司便相继推出了五代智能机,比iPhone便宜很多,虽然销量上远远不及,但没有任何亏损,由于不少功能不及iPhone,用的是安卓系统,所以苹果公司也就睁只眼闭只眼,也就这样获利不少。不过,这种公司再怎么获利,没有突破肯定不会有长久生存的机会,这些公司会永远默默无闻,被其他有创新的品牌,被国际市场小视,最后迟早会被时代淘汰。
生活中我们也应该有足够的忧患意识,生活中的每一件事做完美了或者做成了都会是一种锻炼,时代在发展,也许有时除了学习以外多了解科技方面的发展也不是坏事,有些时候不断努力地突破一件你办不到的事情也可能成为未来成功的基础,现实未必是绝对的,花费一些本可以自由的时间研究感兴趣的东西,未来也就可能变得更成功。
当我们生活的世界不断改变,我们必须跟上脚步,走在时代的前沿,了解更多科技和未来,做好我们的本职工作。未来,指在突破现实,走向成功的彼岸!
上海松江区民办包玉刚实验学校(初中部)初二:Ricky Yu
本文标题:轻触开关实现自锁功能-新一代小米插线板正式发布 功能更加强大 触控开关61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1