samedi 18 décembre 2021

Sauvegarder une image 32 bits décrite par un vector1D vers TIFF2D en C++

La fonction suivante sauvegarde l'image 2D en Tiff 32 bits. l'échantillonnage (dimension physique du pixel en mètre) est passé grâce à taille_pixel. res_unit est un tag propre à libTIFF.

#include <tiffio.h>
/*save a C++ vector array (double) into a TIFF.*/
void SAV_Tiff2D(std::vector<double> const &Img2D, string chemin, double taille_pixel)
{   int dim=pow(img2D.size(),0.5);
    float xres, yres;
    uint16  res_unit;
    TIFF *tif_out= TIFFOpen(chemin.c_str(), "w");//"w"->ecraser, "a"->ajouter
    TIFFSetField (tif_out, TIFFTAG_IMAGEWIDTH, dim);
    TIFFSetField (tif_out, TIFFTAG_IMAGELENGTH, dim);
    TIFFSetField (tif_out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    TIFFSetField (tif_out, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField (tif_out, TIFFTAG_ROWSPERSTRIP, 1);
    TIFFSetField (tif_out, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
    TIFFSetField (tif_out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField (tif_out, TIFFTAG_BITSPERSAMPLE, 32);
    TIFFSetField (tif_out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
    TIFFSetField (tif_out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
    //fixer la résolution
    xres = yres = 0.01/taille_pixel; //nbpixel par resunit (par centimetre)=0.01m/taille_pixel en metre
    res_unit = RESUNIT_CENTIMETER;
    TIFFSetField(tif_out, TIFFTAG_XRESOLUTION, xres);
    TIFFSetField(tif_out, TIFFTAG_YRESOLUTION, yres);
    TIFFSetField(tif_out, TIFFTAG_RESOLUTIONUNIT, res_unit);

    tsize_t strip_size = TIFFStripSize (tif_out);
    tstrip_t strips_num = TIFFNumberOfStrips (tif_out);

    float* strip_buf=(float*)_TIFFmalloc(strip_size);
    for (unsigned int s=0; s<strips_num; s++)
    {
        for (unsigned int col=0; col<dim; col++)
        {
            unsigned int cpt=col+dim*s;
            strip_buf[col]=(float)img2D[cpt]; //transtypage vers 32 bits
        }
        TIFFWriteEncodedStrip (tif_out, s, strip_buf, strip_size);
    }
    _TIFFfree(strip_buf);
    TIFFWriteDirectory(tif_out);
    TIFFClose(tif_out);
}

La compilation nécessite un lien vers libTIFF : -ltiff

vendredi 17 décembre 2021

Afficher une image statique avec wxWidgets

WxWidgets présente plusieurs classes pour manipuler les images.

wxImage est une représentation portable d'une image, wxBitmap est un équivalent spécifique à la plate-forme mais plus efficace. De manière générale, wxImage est pratique pour travailler avec des données d'image, mais celles-ci doivent être converties en wxBitmap pour être affichées.

Ces deux classes ne sont que des classes abstraites, tandis que wxStaticBitmap est un contrôle affichant une image, c'est-à-dire quelque chose que vous pouvez réellement voir à l'écran.

L'exemple ci dessous affiche une image BMP dans le wxPanel "zone 22".

wxPanel *zone22 = new wxPanel(panel_centre);
wxStaticBitmap *monImg;
monImg = new wxStaticBitmap(
zone22, wxID_ANY,
wxBitmap("/ramdisk/centres.bmp", wxBITMAP_TYPE_BMP),
wxPoint(50,50),
wxSize(250,250)
                           );

vendredi 10 janvier 2020

Installer WinLens3D avec Wine

winLens3D est un logiciel de conception optique édité par Linos/Qioptiq

Lire la suite...

lundi 11 novembre 2019

Celeste : meurs et réssaye, mais pas trop...

logo_celeste.png    Celeste est un jeu de plate forme en pixel art, dont la recette repose sur le die and retry. C'est donc un jeu  plutôt punitif, qui a connu un accueil incroyablement positif dans la  presse, malgré une apparence simple et une jouabilité plutôt connue.   Est ce que le bruit autour de ce jeu est vraiment justifié ?

Lire la suite...

jeudi 1 août 2019

Analyser une partition racine pleine

Remplir sa partiiton racine sous Linux est un peu ennuyeux. Voici une méthode pour voir par qui la place a été prise.

Lire la suite...

dimanche 19 mai 2019

Solfège et suite mathématique : pourquoi rien ne/tout sonne juste.

Quelles notes sonnent justes à l'oreille ? Pourquoi le solfège est il ainsi construit ? Pourquoi les notes sont elles au nombre de 7 et une octave divisée en 12 tons ? Cette construction repose sur un principe très simple, mais qui donne lieu à des explications alambiquées voire quasi mystiques dans bien des cours de solfège.

Lire la suite...

dimanche 10 février 2019

Clavier Corsair et détection des manettes sur Linux

Le clavier Corsair est parfois détecté comme un contrôleur, ce qui pose problème dans certains jeux.

Lire la suite...

jeudi 23 août 2018

Steam dispose désormais d'un mode de compatibilité Windows pour Linux

Valve avait réaffirmé il y a peu son engagement envers Linux, précisant avoir de nouveaux projets en cours de réalisation. Les spéculations ont pris fin avec une annonce étonnante : Steam disposera désormais officiellement d'un mode de compatibilité Windows pour le système Linux, utilisant une version modifiée de Wine et l'API Vulkan.

Lire la suite...

mardi 1 mai 2018

Mini PC Linux Mint avec AMD Raven Ridge

[Edition août 2018 : la séquence de démarrage et le pilote amdgpu  fonctionnent désormais   avec Mint 19 et le noyau 4.15, mais pas le pilote Vulkan qui fait planter au boot]

Avec leur partie graphique performante, les APU  Raven Ridge offrent la possibilité de monter des PC de jeux à bas coût et très intégrés.  Après une petite revue matériel, je m'attarde un peu sur l'installation d'une Linux Mint : monter un PC avec du matériel très récent nécessite parfois quelques ajustements, du bootkit AMD à la dernière version de Mesa...Si vous êtes allergique à la console, j'indique en général les interfaces graphiques remplaçant les commandes.

 

Avertissement : le support reste incomplet avec le noyau 4.16 utilisée ici, ce qui peut se traduire par des instabilités, notamment avec les puces B350(1). La version 4.17 devrait sortir fin juin/début juillet. 

Lire la suite...

vendredi 28 juillet 2017

Wonder Boy: The Dragon's Trap disponible sur Linux

Les fans de jeu de plateforme à l'ancienne peuvent se réjouir avec ce nouveau portage d'Ethan Lee, la reprise 2017 de Wonder Boy :
The Dragon's Trap est désormais disponible sur Linux et Mac.

Lire la suite...

dimanche 29 mai 2016

Démarrage Debian perturbé après ajout d'un disque dur

Si votre système ne démarre plus après l'ajout d'un disque dur, la solution peut être assez simple.

Les symptômes

sont les suivants :

-PC sous Debian 8 ,disposant déjà de deux disque durs, l'un en port SATA 2 (/dev/sda) et l'autre en port SATA 5 (/dev/sdb, partition système sur SSD).

-Ajout d'un 3è disque sur le port SATA 3 (/dev/sdc/).

Le PC trouve bien Grub, mais ce dernier ne semble pas être capable de trouver la partition de boot /dev/sdb sur le SSD. Le démarrage plante juste après grub, en laissant un message générique peu utile (cannot find /dev/tty).

Le nouveau disque dur fonctionne bien en branchement à chaud.

L'analyse

Ces deux disque durs sont identifiés par des UUID , qui ne devraient donc pas changer lors d'une modification matériel, ce qui est vérifiable avec la commande

blkid

ou en vérifiant dans /etc/fstab.

dans mon cas, la partition de boot appraît sous la forme


UUID=8e7e9a6c-5d91-4106-abef-fda15ff681bd /               ext4    errors=remount-ro 0       1

mais la commande de lancement contient bizarrement le périphérique lui même :

cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.16.0-4-amd64 root=/dev/sdb1 ro quiet nomodeset nouveau.modeset=0

La solution

Elle est assez simple et repose sur la commande update-grub :

-débrancher le 3è disque

-démarrer le système

-rebrancher le disque à chaud et l'ajouter à /etc/fstab

-lancer

update-grub

La commande va réanalyser l'ordre des disque durs. Pour preuve, à la fin de l'opération, les périphériques /dev/sdX ont changé d'ordre pour suivre l'ordre des numéros de port SATA : SATA 2 sur /dev/sda, SATA3 sur /dev/sdb et SATA5 sur /dev/sdc.

lundi 28 mars 2016

Connecter une guitare avec Linux

Utiliser une guitare avec Linux peut se faire assez rapidement si les différents éléments (carte son, micro) sont compatibles. L'ensemble utilise le serveur de son Jack, et peut même utiliser PulseAudio.

Lire la suite...

lundi 7 mars 2016

Bienvenue sur Dotclear !

Ceci est votre premier billet. Quand vous serez prêt à bloguer, connectez-vous pour le modifier ou le supprimer.