2010-10-03 3 views
3

J'ai du mal à trouver la bibliothèque d'images boost.boost :: gil Interleaved_view

Je n'ai pas trouvé de documentation exacte sur l'utilisation de la fonction interleaved_view incluse dans la bibliothèque boost :: gil. Plus précisément, je ne sais pas exactement quel format binaire les données brutes est censé être stocké dans

La seule mention de ce que je pouvais trouver était dans le tutoriel gil.

// Calling with 8-bit RGB data into 16-bit BGR 
void XGradientRGB8_BGR16(const unsigned char* src_pixels, ptrdiff_t src_row_bytes, int w, int h, 
           signed short* dst_pixels, ptrdiff_t dst_row_bytes) { 
    rgb8c_view_t src = interleaved_view(w,h,(const rgb8_pixel_t*)src_pixels,src_row_bytes); 
    rgb16s_view_t dst = interleaved_view(w,h,( rgb16s_pixel_t*)dst_pixels,dst_row_bytes); 
    x_gradient(src,dst); 
} 

En outre, le prototype de la fonction dit

template<typename Iterator> 
type_from_x_iterator< Iterator>::view_t  
boost::gil::interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) 
//Constructing image views from raw interleaved pixel data. 

Ma question est, quel est exactement le format gil attend dans le format binaire, et ce qui est rowsize_in_bytes censé être?

La seule fois où j'ai vu une image entrelacée, c'est quand je travaillais avec OpenGL, qui était juste une information RVB pour chaque pixel stocké l'un à côté de l'autre. Je pensais que rowsize_in_bytes serait juste littéralement la taille d'une rangée de pixels en octets, alors j'ai essayé d'écrire un PNG avec ceci:

void makeImage(const string fileName, const unsigned char * src, const int w, const int h) { 
    rgb8c_view_t outImage = interleaved_view(w,h, (const rgb8_pixel_t*) src, w*3*sizeof(unsigned char)); 
    boost::gil::png_write_view(fileName,outImage); 
} 

et le src d'entrée était un tableau plat de taille w * h, format

(char)R, (char)G, (char)B, (char)R, (char)G, (char)B, (char)R, (char)G, (char)B ... 

L'image était juste une boîte blanche sur un fond noir. Cependant, les résultats que j'ai obtenu étaient plutôt ... étrange

Results

Si quelqu'un a une idée pourquoi cela est arrivé, et comment fonctionne interleaved_view en fait, ce serait génial. Merci d'avance!

EDIT: Désolé les gars, je viens de réaliser mon erreur stupide. Je l'ai eu fonctionné maintenant ... :(Le problème n'était pas avec le format de l'image, mais plutôt que c'était la rangée principale, et non la colonne majeure

Répondre

7

Désolé les gars, je viens de réaliser immédiatement après avoir posté que je '' J'ai travaillé avec matlab pendant trop longtemps ... J'ai écrit le tableau sous forme de colonne majeur ... Ugh je me sens stupide

+2

+ 1 pour avoir admis votre erreur et avoir écrit une réponse à ce sujet. pourrait faire la même erreur et considérer cela utile. – schnaader

Questions connexes