一个图像缩放的简单算法:
BOOL MyBilinearScalingImage(char * pOriImg, int OriW, int OriH, char * pSrcImg, int SrcW,int SrcH)
{
        //TODO: Add your source code here    unsigned char  pBits;
    unsigned char  *p0, *p1, *p2, *p3;
    int   k, SrcWByte, OriWByte, Wr, Hr, m, n;
    float acc_a, acc_b, acc_a1, acc_b1, da, db;
    float Value;
    int Height, Width;
    float old_acc_a, old_acc_b;
    int p, q, old_p, old_q;    pBits = 24/8;
    Wr = SrcW / OriW;
    Hr = SrcH / OriH;
    da = (float)OriW / (float)SrcW;
    db = (float)OriH / (float)SrcH;    SrcWByte = WIDTHBYTES(24*SrcW);
    OriWByte = WIDTHBYTES(24*OriW);   // ShowPercent(0, 0, STAGE_SCALE_IMAGE);
Height = OriH; // - 1 ;
Width = OriW; // -1 ; //   ShowPercent(0, 0, STAGE_SCALE_IMAGE); acc_b = 0; //db/2.0;
p = 0;
for (m = 0; m < Height; m++)
{
       // if ( (m%5) == 0 ) ShowPercent((WORD)m, (WORD)OriH, 0);
acc_a = 0; //da/2.0;
q = 0;
for (n = 0; n < Width; n++)
{
p0 = pOriImg + m*OriWByte + n*pBits;
if(m==Height-1)
p2 = p0;
else
p2 = p0 + OriWByte;
if(n==Width-1)
{
p1 = p0;
p3 = p2;
}
else
{
p1 = p0 + pBits;
            p3 = p2 + pBits;
} old_p = p;
old_acc_b = acc_b;
while(acc_b<1.0 && p<SrcH)
{
acc_b1 = 1.0-acc_b;
old_acc_a = acc_a;
old_q = q;
while(acc_a<1.0 && q<SrcW)
{
acc_a1 = 1.0-acc_a;
                    for (k=0; k<pBits; k++) 
{
                        Value = *(p0+k)*acc_a1*acc_b1 + 
                                *(p1+k)*acc_a*acc_b1  + 
                                *(p2+k)*acc_a1*acc_b + 
                                *(p3+k)*acc_a*acc_b ;
                        *(pSrcImg+p*SrcWByte+q*pBits+k) = (unsigned char)min((Value+0.5), 255);
}
acc_a += da;
q++;
}
acc_b += db;
p++;
if(acc_b<1.0) // || q>=SrcW)
{
q = old_q;
acc_a = old_acc_a;
}
}
if (acc_a >= 1.0)
acc_a -= 1.0;
if (q<SrcW)
{
p = old_p;
acc_b = old_acc_b;
}
else
{
if( acc_b >= 1.0 )  
acc_b -= 1.0;
}
}
}    return TRUE ;
}

解决方案 »

  1.   

    谢谢。不过,这可能对bmp有效,其他的jpg,html等就可能不行了。
    Windows确实用过thumbvw.dll进行的,但外面对这方面的资料一点都没有。
    微软根本就没有公开过。有一个控件Image Thumbnail control就实现了一
    部分。可惜我还不太会用。并且它不支持html,ppt等Windows Explorer中
    支持的东东。另外,我也不希望对每一种文件都作一个Plugin的DLL.希望
    Windows一支持,我的程序也就自动支持了。比如,GetOpenFilename在
    W2K中就同时支持这种风格。
      

  2.   

    thumbvw.dll是个com组件,具体用法确实没有看到,提供一个ConvertDIBSECTIONToThunbnail,我想对html支持不只是这一个组件能做到的,还有IE其他组件配合,像ppt也需要powerpoint的组件支持。
      

  3.   

    是呀,ppt需要powerpoint支持,但安装了powerpoint之后就会自动支持的。
    在Windows2000的程序中调用GetOpenFilename之后,选择缩小化之后,会
    创建一个"ThumbnailVwExtWnd32"的窗口,里面再创建一个ListView。我现在就
    希望能像GetOpenFilename一样,自动和Explorer进行关联,Windows支持什么
    咱们就同样支持什么。