我想将一个字节字符串从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
我创建了一个图像,我逐个像素地给出了值。但它太慢了。我想知道是否有更快的方法。
答案 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