FMX Problème de rafraichissement d'affichage
Bonjour
J'affiche dans un TImageViewer une image qui provient de données caméra enregistrées dans un fichier. Pour avoir une image visualisable j'utilise le code ci dessous.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
unsigned short maximg = 0;
unsigned short minimg = 0xFFFF;
for (int i = 0; i < 640 * 512; i++) {
if (brtIR[idcam - 1][i] > maximg)
maximg = brtIR[idcam - 1][i];
if (brtIR[idcam - 1][i] < minimg)
minimg = brtIR[idcam - 1][i];
}
double acoul = 0;
if (maximg != minimg) {
acoul = 255 / (double)(maximg - minimg);
}
// traduction des données en niveau de gris
TBitmap *bmp = new TBitmap();
bmp->Width = 640;
bmp->Height = 512;
TBitmapData bitdata1;
if (bmp->Map(Fmx::Graphics::TMapAccess::Write, bitdata1)) {
int *ptr = (int*)bitdata1.Data;
if (acoul != 0) {
for (int i = 0; i < 640 * 512; i++) {
short v = acoul * ((double)brtIR[idcam - 1][i] - minimg);
ptr[i] = 0xFF000000 + (v << 16) + (v << 8) + v;
}
}
else {
for (int i = 0; i < 640 * 512; i++) {
ptr[i] = 0xFFFF0000;
}
}
bmp->Unmap(bitdata1);
if (idcam == 1) {
vue1->Bitmap->Assign(bmp);
updateMinMaxLum(minimg, maximg, lblLumMin1, lblLumMax1);
}
if (idcam == 2) {
vue2->Bitmap->Assign(bmp);
updateMinMaxLum(minimg, maximg, lblLumMin2, lblLumMax2);
}
} |
Le problème est que de temps en temps je n'ai qu'une image toute grise à l'affichage ce qui n'a pas lieu d'être. Je pense qu'il s'agit d'un problème de mise à jour de l'affichage mais je n'arrive pas à forcer la mise à jour de mon composant TImageViewer.
Une idée?