Boost logo

Boost Users :

Subject: Re: [Boost-users] [GIL] wrapper for QImage
From: Tomas Van Verrewegen (tomasvanverrewegen_at_[hidden])
Date: 2009-02-22 06:35:46


> I don't think I'm copying back and forth.
Maybe I misinterpreted the call to
  cvSetData( img
  , &view.begin()[0]
  , num_channels<View>::value * view.width() * sizeof( channel_t ));

> Can you get access to the image buffer, scanline length, etc?
These should do the trick:
  uchar * QImage::bits ()
  const uchar * QImage::bits () const
  int QImage::bytesPerLine () const
  int QImage::depth () const
  QImage::Format QImage::format () const
  int QImage::height () const
  int QImage::width () const

So I can get a pointer to the image buffer. In the case of an ARGB8 image this
pointer can be cast to QRgb* (which is a typedef for unsigned int).

A (class modelling) PixelIteratorConcept should return a (class modelling)
PixelConcept on dereference. unsigned int does not model PixelConcept, so I
suppose I need to create a proxy class that does model PixelConcept...

What I need to implement is this (please correct me if I'm mistaken):

// a pixel in a QImage
// models PixelConcept
template<QImage::Format Format> struct qimage_pixel {
  // ...
}

// iterate over the pixels of a QImage
// models PixelIterator/MutablePixelIterator
template<QImage::Format Format> struct qimage_pixel_iterator;
template<QImage::Format Format> struct qimage_const_pixel_iterator;

// for every member of QImage::Format:
template<QImage::Format Format>
type_from_x_iterator<qimage_pixel_iterator<Format> >::view_t
qimage_view(const QImage& image) {
  return interleaved_view(
    image.width(),
    image.height(),
    qimage_iterator<Format>(image.bits()),
    image.bytesPerLine()
  );
}

// specialize some traits classes (const_iterator_type, channel_type,
// color_space_type, ...) for qimage_pixel and qimage_pixel_iterator


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net