如何将字节数组转换为png图像

时间:2014-03-15 20:35:41

标签: ruby png

我想将一个字节字符串从Ice服务器转换为png,频率为每秒30次。我在这段代码中使用chunky_png gem:

data = @@cprx.getImageData()
width= data.description.width   
height = data.description.height
png = ChunkyPNG::Image.new(width,height, ChunkyPNG::Color::TRANSPARENT)
pixeles = data.pixelData.bytes.to_a
k=0
for i in 0..height-1
  for j in 0..width-1
    png[j,i]=ChunkyPNG::Color.rgb(pixeles[k],pixeles[k+1],pixeles[k+2])
    k=k+3
  end
end
image = png.to_data_url

我创建了一个图像,我逐个像素地给出了值。但它太慢了。我想知道是否有更快的方法。

1 个答案:

答案 0 :(得分:1)

最后我用方法from_rgb_stream解决了这个问题。此外,还有一个名为chunky_png的库,名为oily_png,由于采用了c ++核心,因此速度更快。我的代码目前看起来像:

def ice_camera
    status = 0
    ic = nil
    if session[:conected2] == nil
        arguments= ["--Ice.Config=cameraview.cfg"]
        ic = Ice::initialize(arguments)
        base = ic.propertyToProxy("Cameraview.Camera.Proxy")
        cprx = Jderobot::CameraPrx::checkedCast(base)
        session[:conected2] = true
        thr1 = Thread.new do
            @@mutex = Mutex.new
            while true do
                puts "11111111111111111111111111111111111111111"
                data = cprx.getImageData()
                png = ChunkyPNG::Canvas.from_rgb_stream(data.description.width, data.description.height, data.pixelData)
                @@mutex.synchronize do
                    @@image=png.to_data_url
                end
            end
        end
    end
end