|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Modifier taille bitmap [ Archives / Graphique ] (seba31stien)
Informations & options pour cette discussion
|
mercredi 10 mai 2006 à 11:45:11 |
Modifier taille bitmap

seba31stien
|
Bonjour,
dans mon appli, je charge une carte au format bitmap dans un paintbox.
Cependant, la procédure StretchDraw :
Paintbox1.canvas.StretchDraw(PaintBox1.ClientRect,BmpM); étire bien la
carte mais dès que je dessine sur cette carte, les positions sont aussi
étirées: plus je m'éloigne de la position (0,0), plus l'image que je déplace
s'éloigne de la souris alors qu'elle devrait être dessous.
J'ai opté pour la solution de redimensionner mon image avec paint, puis
de la charger sur mon appli. Cette solution n'étant que temporaire, je souhaiterias redimensionner cette image avec mon appli comme le permet paint
merci
Seb
|
|
|
|
mercredi 10 mai 2006 à 15:14:35 |
Re : Modifier taille bitmap

florenth
|
Alors, c'est toujours un problème quand on dessine sur un TPaintBox. Enfin, avec un peu de méthode, on y arrive. Tout d'abord, tu aurais du poster ce que tu as mis dans l'évenement OnPaint de ton PaintBox, ça aurait pu nous aider.
Ensuite, normalement, quand tu dessine sur un PaintBox, au prochain dessin, tu dois tout redessiner. tu devrais peut être passer pa un bimap temporaire avant de dessiner sur ton PaintBox.
A + pour un bout de code (met aussi l'évent OnMouveMove, OnMouseDown et OnMouseUp, mieux vaut plus que pas assez)
++
Si tu ne te plantes pas ...... tu ne pousseras jamais
|
|
|
|
mercredi 10 mai 2006 à 15:40:59 |
Re : Modifier taille bitmap

seba31stien
|
Réponse acceptée !
Voici mon code :
procedure TForm1.FormCreate(Sender: TObject);
Var
i : integer;
begin
.....
BmpM := tbitmap.create;
BmpM.LoadFromFile('C:\...carte_dept31__.bmp'); // chargement de la carte dans OrigBmp
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
Paintbox1.canvas.draw(0,0,BmpM); // c'est bmpm qui est à jour
end;
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
i : integer;
p : tpoint;
begin
courant := 0; // pas de curseur actif
p.x := X; p.y := Y;
// Si clic dans curseur existant (ptInRect est une fonction GDI Windows)
// For i := 1 to maxcur do if ptinrect(cc[i].rr, p) then courant := i;
For i := 1 to maxcur
do if ptinrect(cc[i].rr, p)
then begin // on a cliqué sur un rectangle de site
courant := i;
if (
waitforsecondsite and new_link_en_cours) // l'appli attend qu'on clique
sur un autre triangle pour relier les deux
then begin
PaintBox1.Canvas.Pen.Color:=clBlue;
PaintBox1.Canvas.Pen.Style:= psSolid;
CC[courant].bond[site_initial_bond]:=True;
CC[site_initial_bond].bond[courant]:=True;
PaintBox1.Canvas.Polyline([cc[site_initial_bond ].centre,cc[courant
].centre ]); // trace une ligne entre deux
"triangles"
PaintBox1.Canvas.Pen.Color:=clBlack;
waitforsecondsite:=not waitforsecondsite;
exit;
end;
if (
not waitforsecondsite and new_link_en_cours) // l'appli attend qu'on
clique sur le 1er triangle du lien
then begin
site_initial_bond:=courant;
waitforsecondsite:=not waitforsecondsite;
exit;
end;
if ( not new_link_en_cours) //
then
begin // on est peut être en train de déplacer un site donc il faut
effacer les liaisons
//rien pour l'instant
end;
end;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
IF ((courant = 0) or new_link_en_cours ) then exit;
IF cc[courant].drawing then
begin
// les nouvelles positions son mémorisées sous forme de rectangle
// ce principe permet de déformer l'objet en plus de le déplacer
cc[courant].rr := rect( x-c1,
y-c2, x+c1, y+c2); // nouvelle position du rectangle
// c1 et c2 sont les longueurs de la base et de la hauteur du triangle
dessinecurseur(courant); // procedure qui dessine un triangle (ou curseur)
Rafraichir_Liaisons; // procedure qui redessine tous les liens entre triangles tracés auparavant
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if courant=0 then exit;
dessinecurseur(courant);
Rafraichir_Liaisons;// procedure qui efface puis trace les liaisons
courant:=0;
CC[courant].drawing:=false;
end;
pour info : CC[x] est de type :
type TSite = record // caractéristiques d'un cuseur
drawing : boolean; // en cours de déplacement
rr : trect; // rectangle position courante
rro : trect; // ancien ancienne position
colo : tcolor; // couleur
centre : Tpoint; // centre du triangle
end;
voilà, bonne lecture ...
|
|
|
|
mercredi 10 mai 2006 à 15:51:37 |
Re : Modifier taille bitmap

florenth
|
Pour ton problème, je ne vois pas trop du fait que tu places des triangles sur ta carte (correspondants à des sites) que tu peux déplacer et aussi relier entre eux.
En plus, tu oublies de préciser que CC[x] contient aussi un array of Boolean à ce que je vois. Mais ça, c'est pas grave.
Le truc, c'est que tes procédures DessineCurseur() et Rafraichir_Liaisons() dessinent-elles directement dans le PaintBox ou alors dans le BmpM ??
Alors là, ça coince pour moi. Désolé.
Si tu ne te plantes pas ...... tu ne pousseras jamais
|
|
|
|
mercredi 10 mai 2006 à 16:08:06 |
Re : Modifier taille bitmap

Abadianet
|
Salut Seb,
Et si tu redimensionnais ton BMP avant, aurais-tu le même problème ?
Pour redimensionner un BMP, tu as plein d'exemples dans le forum.
Tu peux prendre le source de Pilot All posté dans les sources du site ou sur www.abadiane.net et voir dans l'unité UTools.pas la fonction ImageResizeToBMP
Abadiane
|
|
|
|
mercredi 10 mai 2006 à 16:16:30 |
Re : Modifier taille bitmap

seba31stien
|
Réponse à florenth :
je dessines dans le bmpm :
bmpm.canvas.polygon([point(p1, r.top ),
point( r.right -round(c1/2) , r.bottom -round(c2/2)),
point(r.left +round(c1/2), r.bottom -round(c2/2)),
point(p1, r.top )]);
réponse à Abadiane : je consulte le site
|
|
|
|
mercredi 10 mai 2006 à 16:33:25 |
Re : Modifier taille bitmap

florenth
|
Ah, si tu dessines dans le BmpM, c'est normal que ça marche pas. Car si ta souris est sur le pixel 100,100 de ton PaintBox, comme l'image qui est dedans est agrandie, cela correspond peut être au point 30,30 du BmpM. En gros, il faut appliquer le facteur de redimentionnement horisontal et vertical (calculé par la méthode StrctchDraw) et l'appliquer aux coordonées du curseur.
Bre, quel bazar.
Alors que si, dès le départ, tu as BmpM de la même taille que ton PaintBox, là, plus de problèmes. Tu dois alors modifier ta procédure FormCrate comme suit :
procedure TForm1.FormCreate(Sender: TObject); var i: integer; BmpTemp: TBitmap; begin // BmpTemp := TBitmap.Create; BmpTemp.LoadFromFile('C:\...carte_dept31__.bmp'); BmpM := TBitmap.Create; BmpM.Width := PaintBox.Width; BmpM.Height := PaintBox.Height; BmpM.Canvas.StretchDraw(BmpM.Canvas.ClipRect, BmpTemp); BmpTemp.Free; end; et ta procédure PaintBoxPaint comme ça :
begin PaintBox.Canvas.Draw(0, 0, BmpM); end;
Si ça ne marche pas, dis nous ce qui cloche avec un maximum de détails. ++
Si tu ne te plantes pas ...... tu ne pousseras jamais
|
|
|
|
mercredi 10 mai 2006 à 16:48:04 |
Re : Modifier taille bitmap

seba31stien
|
merci florenth, ça marche impeccable mais lorsque je quitte l'appli,
j'ai violation d'accès ..; puis plein de messagedlg :' runtime error
216 at 00405E86'
ça te parle ?
|
|
|
|
mercredi 10 mai 2006 à 16:49:27 |
Re : Modifier taille bitmap
|
|
mercredi 10 mai 2006 à 16:50:14 |
Re : Modifier taille bitmap

seba31stien
|
l'erreur intervient si on a créé au moins un site (dessiner un triangle)
si on ouvre et on quitte, ça ne fait pas l'erreur
|
|
|
Cette discussion est classé dans : appli, image, modifier, carte, bitmap
Répondre à ce message
Sujets en rapport avec ce message
Convetir une imag en Bitmap [ par sebastienbro ]
Je veux convertirune image en ICO, mais il me met une erreur : Image icône incorrectAidez moi !!!!!
ListImage et boucle [ par idaho69 ]
petite explication de la situation :une image (jeu.bmp) contenant un jeu de cartes (54 cartes=52+le dos + face nue) le tout mis dans imagelist1L'on sa
Prob DLL des ressources bitmap [ par ahmed12 ]
Je utilise une dll qui contient des bitmaps a pris avoir compiler une ressource.Et j'ai arrivé de charger ces bmp dans la l'application Hote avec ce
Carte Son VIRTUELLE [ par emmanuelgo ]
salut à tous!bon j'ai déjà posé une question en rapport avec celle-ci sur le forum ( http://www.delphifr.com/forum.v2.aspx?ID=359066 ) mais si je crée
Pb conversion image. [ par Becracker ]
Salut les gars, Je suis entrain de faire un convertisseur d'image Bmp à Gif. J'ai mis le code suivant mais il ya une er
Copie d'une partie d'un image [ par Rapakooti ]
Alors mon pb viens du fait que j'essaie de faire une applique skinnable et par soucis de facilite lors de la creation des futur skins , toutes les ima
comment affecter une bitmap a une image [ par didulle ]
Salut tout le mondej'aimerais utilisé une variable de type bmp sur laquelle j'effectue des traitements. mais dés que je l'affecte à l'image il y a rie
TBitmap et occupation mémoire [ par ThWilliam ]
Bonjour à tous. <p class="MsoNorma
Comment modifier la palette d'un Bitmap 256 couleurs ? [ par Toya78 ]
Bonjour,Je cherche à modifier une couleur d'un TBitmap 256 couleurs en intervenant directement sur sa palette (je cherche à modifier le blanc en rouge
Appliquer un cadre de couleur ou avec un bitmap [ par cincap ]
Bonjour à toutes et à tous,Voici mon problème du jour, après avoir redimensionné une image et avant de la sauver en jpeg, est t'il possible de lui app
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|