一个让桌面下雪的ruby 小程序 snow(2)

#取得某一点与周围点的对比度,确定是否在此位置堆积雪花
  def getContrast(i)
    #colorCmp = 0 #存储用作对比的点的颜色值
    #tempR = 0 #存储CorlorCmp的红色部分,下同
    #tempG = 0
    #tempB = 0
    #slope=0  #存储雪花飘落方向:Vx/Vy

#计算雪花飘落方向
    if @pvy != 0
      slope = @pvx / @pvy
    else
      slope = 2
    end
    #根据雪花飘落方向决定取哪一点作对比点,
    #若PVx/PVy在-1到1之间,即Slope=0,就取正下面的象素点
    #若PVx/PVy>1,取右下方的点,PVx/PVy<-1则取左下方
    if slope == 0
      colorCmp = GetPixel(@hDC1, @px[i], @py[i] + 1)
    elsif slope > 1
      colorCmp = GetPixel(@hDC1, @px[i] + 1, @py[i] + 1)
    else
      colorCmp = GetPixel(@hDC1, @px[i] - 1, @py[i] + 1)     
    end
    #确定当前位置没有与另一个雪花重叠,否则返回0,用于防止由于不同雪花重叠造成雪花乱堆
    if colorCmp == SnowCol
      return 0
    end
    #分别获取ColorCmp与对比点的蓝、绿、红部分的差值
    tempB = ((colorCmp & 0xFF0000).abs - (@pColor[i] & 0xFF0000)) / 0x10000
    tempG = ((colorCmp & 0xFF00).abs - (@pColor[i] & 0xFF00)) / 0x100
    tempR = ((colorCmp & 0xFF).abs - (@pColor[i] & 0xFF))
    ##返回对比度值
    (tempR + tempG + tempB) / 3
  end

def cc
    ReleaseDC 0, @hDC1 #释放桌面窗口设备句柄
    InvalidateRect 0, 0, 0 #清除所有雪花,恢复桌面
  end

def run
    trap(:INT){exit} #按 c-c 退出
    timerStart #启动定时器

#等到所有进程退出后,主进程再退出
    while(Thread.list.count != 1) do sleep 1 end    
    cc #结束运行
  end
end

Snow.new.run

一个让桌面下雪的ruby 小程序 snow

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxppg.html