3 votes

exercice de conception utilisant de préférence mfc

On m'a demandé de concevoir un programme paintbrush en deux variantes, l'une qui utilise beaucoup d'espace et peu de cpu et l'autre vice versa.

l'idée (comme on me l'a dit - donc pas sûr) est en quelque sorte de sauvegarder les instantanés d'écran contre la sauvegarde des cartes XOR (dont je n'ai aucune idée de ce que cela signifie) qui représentent le delta entre la peinture.

Quelqu'un peut-il suggérer un moyen ou ajouter des liens vers des documents connexes ?

5voto

Jerry Coffin Points 237758

L'endroit le plus évident pour utiliser les captures d'écran serait d'implémenter une commande "annuler". La méthode la plus simple et la plus efficace consiste à prendre un instantané de l'écran avant chaque action. Si l'utilisateur appuie sur "annuler", vous pouvez restaurer l'ancien écran.

Pour économiser de l'espace mémoire, vous enregistrez uniquement la différence entre les deux écrans, en les combinant par XOR. En soi, cela ne permet pas de gagner de l'espace, mais cela met tous les pixels inchangés à 0. Pour gagner de l'espace, vous devrez ensuite appliquer une sorte de compression. Étant donné que l'on peut s'attendre à ce que des zones assez importantes soient toutes à zéro, un codage par longueur de course sera probablement rapide et efficace. Pour un codage de la longueur d'exécution, vous transformerez généralement une chaîne d'octets identiques en deux octets, le premier contenant la longueur de l'exécution et le second la valeur. Par exemple, 75 zéros d'affilée seront encodés sous la forme suivante 75 0 .

Si vous voulez aller un peu plus loin, au lieu de sauvegarder des bitmaps XORés, vous pouvez envisager d'utiliser un métafichier. Un métafichier enregistre les actions prises au niveau des appels GDI de Windows, donc (par exemple) si vous dessinez un rectangle rouge de 100x200 à 10, 100, il enregistrera essentiellement cela -- c'est-à-dire qu'au lieu des vingt mille pixels, il enregistrera un identifiant indiquant quelle fonction GDI exécuter, et les paramètres à fournir à cette fonction. Dans un cas typique, la moyenne est d'environ 15 à 20 octets par "commande" exécutée. En même temps, cela implique (souvent) plus de calculs -- par exemple, si vous dessinez un cercle, la réexécution d'un métafichier nécessite le re-rastérisation du cercle au lieu de simplement stocker les bits produits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X