[Liblas-devel] libLAS 1.6.1 - Can't read color in Point Format 2

Ryan W. Frenz ryan at allpointsystems.com
Tue Nov 8 16:15:15 EST 2011


It seems I am unable to read RGB color from points in point format 2.  
Using the code snippets below, I write 10 points to a LAS file, with RGB 
color, and then read it back.  I can read back the coordinates properly 
but not the color (I get RGB=0,0,0 for all points).  Anything jump out 
that I'm doing wrong?  Could someone point me to some sample data in 
point format 2 that I could use for testing?

Notes:
  - This same code works properly using Point Format 0 and 
Set/GetIntensity instead of Color.
  - I am performing this test using libLAS 1.6.1 compiled for Windows 
(same results in 32 and 64 bit).

Thanks in advance,
Ryan

void write(const std::string& filename) {
     std::ofstream out(filename, std::ios::binary);
     liblas::Header h;
     h.SetDataFormatId(liblas::ePointFormat2);
     h.SetPointRecordsCount(10);
     h.SetPointRecordsByReturnCount(1, 10);
     h.SetScale(0.001, 0.001, 0.001);
     h.SetOffset(0,0,0);

     liblas::Writer w(out, h);
     for (double i = 0; i <= 1.0; i+=0.1) {
       liblas::Point p;
       p.SetX(i);  p.SetY(i); p.SetZ(i);
       liblas::Color c;
       
c.SetRed(static_cast<liblas::Color::value_type>(std::numeric_limits<liblas::Color::value_type>::max() 
* i));
       
c.SetGreen(static_cast<liblas::Color::value_type>(std::numeric_limits<liblas::Color::value_type>::max() 
* i));
       
c.SetBlue(static_cast<liblas::Color::value_type>(std::numeric_limits<liblas::Color::value_type>::max() 
* i));
       p.SetColor(c);
       w.WritePoint(p);
     }
     out.close();
}

void read(const std::string& filename) {
     std::ifstream in(filename, std::ios::binary);
     liblas::Reader reader(in);
     int ct = 0;
     while ((ct < 10) && reader.ReadNextPoint()) {
       const liblas::Point& p = reader.GetPoint();
       std::cerr << p.GetX() << ", " << p.GetY() << ", " << p.GetZ() << 
", " << p.GetColor().GetRed() << ", " << p.GetColor().GetGreen() << ", " 
<< p.GetColor().GetBlue() << "\n";
       ++ct;
     }
     in.close();
}

-- 
Ryan W. Frenz
Head of Software Development
Allpoint Systems
ryan at allpointsystems.com
(412) 444-5149		



More information about the Liblas-devel mailing list