如题,谢谢!

解决方案 »

  1.   

    int __fastcall TForm1::Stretch_Linear(Graphics::TBitmap *aDest, Graphics::TBitmap *aSrc)
    {
    int sw = aSrc->Width - 1, sh = aSrc->Height - 1,
    dw = aDest->Width - 1, dh = aDest->Height - 1; int B, N, x, y; int nPixelSize = GetPixelSize(aDest, aDest->PixelFormat);
    if (nPixelSize == -1 ) {
    return -1;  // unsupport
    } BYTE * pLinePrev, *pLineNext;
    BYTE * pDest;
    BYTE * pA, *pB, *pC, *pD; for ( int i = 0; i <= dh; ++i )
    {
    pDest = ( BYTE * )aDest->ScanLine[i];
    y = i * sh / dh;
    N = dh - i * sh % dh;
    pLinePrev = ( BYTE * )aSrc->ScanLine[y++];
    pLineNext = ( N == dh ) ? pLinePrev : ( BYTE * )aSrc->ScanLine[y];
    for ( int j = 0; j <= dw; ++j )
    {
    x = j * sw / dw * nPixelSize;
    B = dw - j * sw % dw;
    pA = pLinePrev + x;
    pB = pA + nPixelSize;
    pC = pLineNext + x;
    pD = pC + nPixelSize; if ( B == dw )
    {
    pB = pA;
    pD = pC;
    } for ( int k = 0; k < nPixelSize; ++k )
    {
    *pDest++ = ( BYTE )( int )(
    ( B * N * ( *pA++ - *pB - *pC + *pD ) + dw * N * *pB++
    + dh * B * *pC++ + ( dw * dh - dh * B - dw * N ) * *pD++
    + dw * dh / 2 ) / ( dw * dh )
    );
    }
    }
    }
    return 0;
    }//---------------------------------------------------------------------------int __fastcall TForm1::GetPixelSize( Graphics::TBitmap *abmp, TPixelFormat fmt )
    { int nBitCount, nMultiplier;
    int BitsPerByte = 8; nMultiplier = -1;

    switch(fmt)
    {
    case pfDevice:
    {
    nBitCount = GetDeviceCaps(abmp->Canvas->Handle, BITSPIXEL);
    nMultiplier = nBitCount / BitsPerByte;
    if (nBitCount % BitsPerByte > 0 )
    {
    nMultiplier += 1;
    }
    }
    break;
    case pf1bit: nMultiplier = 1; break;
    case pf4bit: nMultiplier = 1; break;
    case pf8bit: nMultiplier = 1; break;
    case pf15bit: nMultiplier = 2; break;
    case pf16bit: nMultiplier = 2; break;
    case pf24bit: nMultiplier = 3; break;
    case pf32bit: nMultiplier = 4; break;
    default:
    return -1;
    }
    return nMultiplier;
    }
      

  2.   

    JPEG-->BMP-->Stretch_Linear()->BMP->SAVETOJPEG
      

  3.   

    to : leoneo_zhang(木牛流马) 先谢谢回答,但我要的是delphi的方法啊!
      

  4.   

    var
      h,w:integer;
      bmp: TBitmap;
      MyJpg:TJPEGImage;
    begin
     MyJpg := TJPEGImage.Create;
     bmp:= TBitmap.Create;
     Image1.Picture.LoadFromFile('c:\in.jpg');
     with bmp do
       begin
         h:=Round(image1.Picture.Metafile.Height*0.8);//缩放比例0.8
         w:=Round(image1.Picture.Metafile.Width*0.8);
         Height:=h;
         Width:=w;
         Canvas.StretchDraw(Rect(0,0,w,h),image1.Picture.Metafile);
       end;
         MyJpg.Assign(bmp);
         MyJpg.CompressionQuality:=90;//JPG图片质量0-100
         MyJpg.Compress;
         MyJpg.SaveToFile('c:\out.jpg');
      bmp.free;
      MyJpg.free;
    end;