DelphiʵÏÖͼÏñµÄ·Å´óºÍÂþÓÎ_Delphi_ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤»ùµØ--Powered by WWW.RONGSEN.COM.CN

DelphiʵÏÖͼÏñµÄ·Å´óºÍÂþÓÎ

×÷ÕߣººÚ¿Í·ÀÏßÍø°²Íøվά»¤»ùµØ À´Ô´£ººÚ¿Í·ÀÏßÍø°²Íøվά»¤»ùµØ ä¯ÀÀ´ÎÊý£º0

±¾Æª¹Ø¼ü´Ê£ºDelphi
ºÚ¿Í·ÀÏßÍø°²ÍøѶ£ºÎÒÏë´ó¼ÒÓ¦¸Ã¶¼Óùý ACDSee »òÕß Windows XP£¬ËüÃǶ¼Ö§³ÖͼÏñµÄ·Å´óºÍÂþÓΣ¬ËäÈ»ÍøÉÏÒ²ÓÐÏà¹ØµÄ×ÊÁÏ£¬µ«ÊǶ¼²»ÊǺÜÈ«Ã棬½ñÌìÎÒ¸ø´ó¼Ò½éÉÜÒ»ÖÖ·½·¨£¬ÓÉÓÚƪ·ùµÄ¹Øϵ£¬Ö÷Òª½²ÈçºÎʵÏÖ£¬¾¡Á¿×öµ½ÑÔ¼òÒâê࣬ºÃÁË£¬ ...
ÎÒÏë´ó¼ÒÓ¦¸Ã¶¼Óùý ACDSee »òÕß Windows XP£¬ËüÃǶ¼Ö§³ÖͼÏñµÄ·Å´óºÍÂþÓΣ¬ËäÈ»ÍøÉÏÒ²ÓÐÏà¹ØµÄ×ÊÁÏ£¬µ«ÊǶ¼²»ÊǺÜÈ«Ã棬½ñÌìÎÒ¸ø´ó¼Ò½éÉÜÒ»ÖÖ·½·¨£¬ÓÉÓÚƪ·ùµÄ¹Øϵ£¬Ö÷Òª½²ÈçºÎʵÏÖ£¬¾¡Á¿×öµ½ÑÔ¼òÒâê࣬ºÃÁË£¬ÎÒÃÇÏÖÔھͿªÊ¼¡£
˵Ã÷£º
1.±¾ÎÄʹÓà Object pascal ½øÐÐÃèÊö£¬Çë¶ÁÕß×ÔÐÐת»»ÎªÏà¹ØµÄ´úÂ룬×÷Õß¾¡Á¿×öµ½Óë´úÂëÎÞ¹Ø
2.Éæ¼°µ½Í¼Ïñ²Ù×÷£¬¾¡Á¿Ê¹Óà Windows API ºÍλ²Ù×÷


ÀíÂÛƪ£º
¹Ø¼ü´Ê£º
»æͼÇø£­¼´´°¿ÚÏÔʾͼÏñµÄÇøÓò£¬Òà¿ÉΪȫÆÁÄ»£¨ÔÚÈ«ÆÁĻϻæͼµÄЧ¹û±ÈÒ»°ã´°¿ÚϺã©
ÖÐÐĵ㣭¼´Òª»æͼÇøÏÔʾµÄÖÐÐĵãÔÚԭʼͼÏñµÄ×ø±ê£¨ÉùÃ÷£ºÕâ¸ö¸ÅÄîÌرðÖØÒª£©

¡¡¡¡ÏÈ˵˵ͼÏñµÄ·Å´ó£¬Òª·Å´óÒ»ÕÅͼƬ£¬ÎÒÃÇÒ»°ãµÄ×ö·¨ÊÇÖ±½Ó·Å´óͼÏñ£¬µ«±¾ÎĽéÉܵķ½·¨½ö·Å´óÎÒÃÇÄܹ»¿´µ½µÄ²¿·Ö£¬·Å´ó·ÖÁ½ÖÖÇé¿ö£¬Ò»ÖÖÊÇ·Å´óºó±È»æͼÇø»¹ÒªÐ¡£¬ÕâÖÖÇé¿öûʲôºÃ˵£¬µ±È»ÊÇÏÔʾȫ²¿µÄͼÏñ;µÚ¶þÖÖÊÇ·Å´óºóµÄͼÏñ±È»æͼÇø´ó£¬Õâ²ÅÊÇÎÒÃǽñÌìÒªÌÖÂÛµÄÖص㻰Ì⣬ÕâÖÖÇé¿öÏÂÎÒÃÇÏÈҪȷ¶¨Í¼Ïñ·Å´óºóµÄ´óС£¬È»ºó¸ù¾Ý¡°ÖÐÐĵ㡱¼ÆËãÔÚԭʼͼÏñµÄλÖúʹóС£¬×îºó°Ñ½ØÈ¡µÄͼÏñ·Å´óµ½»æͼÇø¡£
¡¡¡¡ÔÙ˵˵ͼÏñµÄÂþÓΣ¬µ±ÏÔʾµÄͼÏñ³¬¹ý»æͼÇøʱ£¬ÎÒÃÇÐèÒª¶ÔͼÏñ½øÐÐÂþÓΣ¬ÒԱ㿴µ½È«²¿µÄͼÏñ¡£Ô­ÀíÊÇ£ºµ±Êó±êÔÚ»æͼÇø½øÐе¥»÷ʱ£¬Õâʱ¿ªÊ¼ÂþÓΣ¬ÏȼǼÊó±êµÄµ¥»÷λÖã¬È»ºó¼ì²âÊó±êµÄÒƶ¯£¬¸ù¾ÝÊó±êºÍÉϴεÄλÒƼÆËã³ö¡°ÖÐÐĵ㡱£¨ÐèÒª½«ÆÁÄ»×ø±êת»»ÎªÔ­Ê¼Í¼Ïñ×ø±ê£©£¬¸ù¾ÝÔÚÉÏÃæ·Å´óµÄÔ­Àíµ½Ô­Ê¼Í¼ÏñÖÐÈ¡³öÒªÏÔʾµÄ²¿·Ö£¬·Å´óÏÔʾµ½»æͼÇø¡£

Ë㷨ʵÏÖƪ£º
1.ͼÏñ·Å´ó
±äÁ¿¶¨Ò壺
PZoom:·Å´óÂÊ(ÕûÊý:100ʱΪ100%£¬¸ù¾ÝÐèÒª¿ÉÒÔ½« 100 ¸ÃΪ 10000 »òÕ߸ü´óЩ£¬µ«²»ÍƼöʹÓø¡µãÊý)
a,b:ÖÐÐĵã
w,h:Òª½ØȡԭʼͼÏñµÄ¿íºÍ¸ß
x,y:Òª½ØÈ¡µÄλÖÃ(×óÉϽÇ)
sw,sh:ԭʼͼÏñµÄ¿íºÍ¸ß
p1,p2:·Å´ó±ÈÀý
aw,ah:·Å´óºóͼÏñµÄ´óС
pw,ph:»æͼÇø´óС
vx,vy:ÔÚ»æͼÇøÏÔʾµÄλÖã¨×óÉϽǣ©
vw,vh:ÔÚ»æͼÇøÏÔʾµÄ´óС
ptx,pty:ÁÙʱ±äÁ¿

ÒÑÖªµÄ±äÁ¿£ºPZoom,(a,b),(sw,sh),(p1,p2),(aw,ah),(pw,ph)
Òª¼ÆËãµÄ±äÁ¿£º(x,y),(w,h),(vx,vy),(vw,vh)
¿ªÊ¼¼ÆË㣺
aw=Round(PZoom*sw/100);
ah=Round(PZoom*sh/100);
p1=aw/pw
p2=ah/ph
// ×¢£ºRound ÓÃÓÚÈ¡Õû£¬ÈçÆäËûÓïÑÔµÄInt(),Fix()µÈ
if p1>1 then w=Round(sw/p1) else w=sw
if p2>1 then h=Round(sh/p2) else h=sh
// ×¢£ºshr ΪÓÒÒÆÔËËã·û£¬¿ÉÒÔʹÓá°>>1¡±¡¢¡°div 2¡±¡¢¡°\2¡±»ò¡°Round(w/2)¡±´úÌæ
x=a-w shr 1
y=b-h shr 1

// ×¢£ºdiv ΪÕû³ýÔËËã·û
ptx=(w*PZoom) div 100
pty=(h*PZoom) div 100

// ÒÔϼÆËãÔÚ»æͼÇøÏÔʾµÄͼÏñ´óСºÍλÖÃ
±äÁ¿
    Pencent:double;  // Ëõ·Å±È
    wx:double;       // ¿íËõ·Å±È
    hx:double;       // ¸ßËõ·Å±È

    // »ñµÃËõ·Å±È
    wx:=pw/ptx
    hx:=ph/pty
    if wx>hx then Pencent:=hx
    else          Pencent:=wx;

    // »ñµÃͼƬ×îºóµÄ´óС
    vw:=Round(Pencent*ptx);
    vh:=Round(Pencent*pty);

    // ¼ÆËã³öͼƬµÄλÖÃ
    vx:=(pw-vw) div 2;
    vy:=(ph-vh) div 2;
// ------------------------------------

ºÃÁË£¬Á½¸öÖØÒªµÄÈÎÎñÍê³É(x,y),(w,h),(vx,vy),(vw,vh)ÒѾ­È«²¿¼ÆËãµÃ³ö£¬ÏÂÃæµÄ¹¤×÷¾ÍÊÇÏÔʾÁË£¬ÎÒÃÇÑ¡Ôñ Windows API ½øÐвÙ×÷
// ÒÔÏÂÏÔʾͼÏñ -----------------------
±äÁ¿
sDC ΪԭʼͼƬµÄÉ豸¾ä±ú(DC)
tDC ΪÁÙʱÉ豸¾ä±ú
dDC ×îÖÕÉ豸¾ä±ú

BitBlt(tDC,0,0,w,h,sDC,0,0,SRCCOPY);
SetStretchBltMode(dDC,STRETCH_DELETESCANS);
StretchBlt(dDC,0,0,vw,vh,tDC,0,0,w,h,SRCCOPY);

×îºó»æÖƵ½ÏÔʾµÄÇøÓò¼´¿É£º
ÀýÈ磺BitBlt(GetDC(0),vx,vy,vx+vw,xy+vh,dDC,0,0,SRCCOPY);
// ------------------------------------

2.ͼÏñÂþÓÎ
Ïȶ¨ÒåÈý¸öÈ«¾Ö±äÁ¿£º
FBeginDragPoint   :TPoint;         // ¼Ç¼Êó±ê¿ªÊ¼Í϶¯µÄλÖÃ
FBeginDragSBPoint :TPoint;         // ¼Ç¼¡°ÖÐÐĵ㡱λÖÃ
FBeginDrag        :boolean;        // ÊÇ·ñÒѾ­¿ªÊ¼¡°Í϶¯¡±
a,b               :integer;        // ¡°ÖÐÐĵ㡱λÖÃ

ÔÚÊó±ê×ó¼üµã»÷ʱ£¬¼Ç¼Êó±êµÄλÖú͡°ÖÐÐĵ㡱µÄλÖã¬Í¬Ê±ÉèÖà FBeginDrag ΪÕæ
µ±Êó±êÓÒ¼üµ¯Æðʱ£¬ÉèÖà FBeginDrag Ϊ¼Ù
Êó±êÒƶ¯Ê±£¬ÅÐ¶Ï FBeginDrag £¬Èç¹ûΪ¼Ù²»½øÐд¦Àí£¬Èç¹ûΪÕæ½øÐÐÏÂÃæ´¦Àí£º
¼ÙÉè X,Y ΪÊó±êµ±Ç°µÄλÖÃ
a=FBeginDragPoint.X-((X-FBeginDragPoint.X)*100) div PZoom
b=FBeginDragPoint.Y-((Y-FBeginDragPoint.Y)*100) div PZoom

×îºóʹÓÃÉÏÃæ½éÉܵÄͼÏñ·Å´óÏÔʾ³öͼÏñ

¼¼ÇÉƪ£º
1.Èç¹ûͼÏñ½Ï´ó£¬Ê¹Óà delphi µÄ λͼ¶ÔÏó»á³öÏÖÄÚ´æÒç³ö´íÎó£¬Õâʱ¿ÉÒÔ½øÐÐÈçÏÂÉèÖãº
    bitImage:=TBitmap.Create;
    bitImage.PixelFormat:=pf24bit;
    bitImage.ReleaseHandle;
2.Èç¹ûÒªÈÃͼÏñ×Ô¶¯ÊÊÓ¦´°¿ÚµÄ´óС£¬²Î¿¼ÒÔÏ´úÂ룺
var
    p1,p2       :double;
begin
    p1:=pw/sw;
    p2:=ph/sw;
    if p1>p2 then PZoom:=Round(p2*100)
    else          PZoom:=Round(p1*100);
    if PZoom=0 then PZoom:=100;
end;
3.ÒªÏëÈÃͼÏñµÄЧ¹ûºÃ£¬×îºÃÔÚÈ«ÆÁÄ»·½Ê½Ï½øÐÐ
¸Ã·½·¨Îª¡°Crazy Marker¡±ËùÓã¬Èç¹û¶ÁÕßÓÐÐËȤ¿ÉÒÔ¿´¿´Ð§¹û

    ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤·½°¸±¾ÆªÁ¬½Ó£ºhttp://www.rongsen.com.cn/show-219-1.html
Íøվά»¤½Ì³Ì¸üÐÂʱ¼ä:2008-02-22 03:14:24  ¡¾´òÓ¡´ËÒ³¡¿  ¡¾¹Ø±Õ¡¿
ÎÒÒªÉêÇë±¾Õ¾£ºNµã | ºÚ¿Í·ÀÏß¹ÙÍø |  
רҵ·þÎñÆ÷ά»¤¼°Íøվά»¤ÊÖ¹¤°²È«´î½¨»·¾³£¬ÍøÕ¾°²È«¼Ó¹Ì·þÎñ¡£ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤»ùµØÕÐÉ̽øÐÐÖУ¡QQ:29769479

footer  footer  footer  footer