J'ai une situation presque identique et je pense qu'il y a un moyen de le faire.
Mon problème consiste à déterminer si une boîte englobante de texte croise un ensemble complexe de lignes (peut-être lissées) dessinées sur une surface. C'est actuellement un goulot d'étranglement et la gestion rapide des intersections permettrait d'accélérer le sw de 100x peut-être. Qui sait.
De toute façon, grâce à la mention de 0td cairo_in_stroke j'ai commencé à tourner le problème. Voici la chose.
cairo_in_stroke lui-même dit que
« si le point donné est à l'intérieur de la zone qui serait affectée par une opération donnée le chemin courant et les paramètres caressaient cairo_stroke() »
C'est assez inutile. A moins que nous n'effectuions une largeur de ligne si large que le chemin commence à gagner de la place.
- ensemble largeur de ligne à la moitié de la hauteur de la zone de délimitation (appelons ce X)
- positions d'essai X, 2X, ... dans le cadre de délimitation des deux côtés, jusqu'à ce qu'ils se rejoignent au centre
La zone testée n'est pas précisément la zone de délimitation mais une chaîne de cercles qui se chevauchent. Si vous voulez être du bon côté, l'ajout de largeur de ligne vous assurera que la boîte de délimitation n'est jamais touchée.
Je rapporterai si j'ai obtenu cette méthode pour faire le tour (et à quelle vitesse il est devenu).
Eh bien, il y a beaucoup de code de vérification des carrefours au Caire, c'est ce que l'on appelle le découpage, n'est-ce pas? Le code est définitivement là, il n'est simplement pas exposé aux utilisateurs. Je vais aller avec un travail basé sur le raster comme vous le suggérez, mais il semble toujours un peu stupide. Oh, et Cairo n'est pas seulement destiné à la pixellisation, il produit également des formats vectoriels. Je dirais que le Caire est une bibliothèque de dessin vectoriel, et le fait d'avoir à passer par des images raster pour accomplir des choses simples semble un peu stupide. – pafcu
pafcu, je suis d'accord que la route de l'image raster est inélégante. Mais en fonction des besoins, il est parfois préférable d'avoir recours à une solution réalisable, mais inélégante, si elle est plus rapide à mettre en œuvre. J'ai parfois besoin de disposer de disques durs et de m'assurer que les données sensibles qu'ils contiennent ne peuvent pas être lues. L'approche élégante mais longue est une réécriture 7x ou 35x avec des données aléatoires. Au lieu de cela, je les prends juste à mon patio en béton et les frappe à quelques reprises avec un marteau ou une pioche. –
Bob, pouvez-vous s'il vous plaît me rappeler quelle API Cairo fournit cette itération pixel par pixel. J'ai la mémoire c'est là mais je n'ai pas pu le trouver. ADDENDUM: c'est cairo_image_surface_get_data() – akauppi