Cela peut être optimisé, mais il y a toujours la limite de lecture du disque dur...
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
| //parcourire le fichier
// Taille de l'icon
int size_icon_w=96;
int size_icon_h=96;
// Supposons que c'est 3000 la taille de ton image (mais à récupérer pendant la lecture sinon)
int img_size_w=3000;
int img_size_h=3000;
int offset_x=img_size_w/size_icon_w;
int offset_x_end=((img_size_w-(offset_x*size_icon_w))+(((int)(img_size_h/size_icon_h))*img_size_w))* octetsParPixel;
offset_x*=octetsParPixel;
int current_offset=0;
for (l = size_icon_h;l--;)
{
for (k = size_icon_w;k --;)
{
// positionner le pointeur sur le pixel à lire
SetFilePointer(inStream, current_offset, NULL, FILE_CURRENT);
// Décal de l'offset en x
current_offset = offset_x;
// lire le pixel
ReadFile(inStream, framePtr, octetsParPixel, &bytesRead, NULL);
// incrementer le pointeur du buffer
framePtr += octetsParPixel;
}
// Réaligne le décalage en fin de X et ajoute le décalage en Y
current_offset = offset_x_end;
} |
Bon si je me suis pas trompé (j'ai rien testé !!!
![:aie:](https://www.developpez.net/forums/images/smilies/aie.gif)
), tu précalculs tout, ensuite tu te décales dans le fichier pour lire les bons pixels.
offset_x_end permet de "sauter" sur la prochaine ligne en tenant compte que l'image de réduction n'est pas proportionnel.
Pour bien faire il faudrait limiter les appels de fonctions dans la boucle...
Ensuite cela devient dur de rogner.
Le mieux comme il est dit au dessus, est de tout sauvegarder dans des fichiers, pour les relire ensuite.
ps: Vivement que je trouve un job en imagerie j’adore cela
![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
Partager