类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
黑白bmp图像缩放算法纯C源代码,效果达到windows里的画图工具的缩放效果就可以
网友回答:
这个一般人自己写不了
呵呵
比较大
搜搜看有没有
帮你顶一个
顺便我也学学
用StretchBlt,
如果是画到窗口里,直接用这个画就可以了,
如果要转到文件里,可以用这个函数,画到内存DC里,然后把内存DC的内容读出来就可以了。
如果是画到窗口里就用StretchBlt
如果是将实际图像缩小,建议去搜搜
网上这种算法源代码还是比较少,dll到是不少
StretchBlt
其实是不是黑白的都没关系啊。。。
BMP是位图啊,一个象素用八位二进制表示,而且是按照象素连续存放
再加上一些头尾信息而已
这样的话
我们只要把象素重写就好了
对,重写BMP就可以了。按照BMP扫描行的方式,处理一行输出一行,该不会很耗内存。
黑白BMP信息后无调色版部分,一个像素1bit,那么行信息则一个byte含8个点的信息。
还有要注意的:
1.BMP规范是行byte长按照32位即4byte补齐。
2.BMP文件存放的行信息与显示的行信息是正好相反。但是是放大的方式,反正反着放也一样:),所以读取时不必倒过来从文件尾巴读,直接读一行缩放一行即可。
你可以借鉴一下下面程序的思路。该程序是缩放点阵字库用的,点阵字库相当于黑白两色BMP,只是没有BMP头。
int Stretch_Bitmap(PFNT_BITMAP Bmpsrc_p, PFNT_BITMAP DesBitmap_p)
{
int x;
int y;
int in_x;
int in_y;
unsigned char* p_in;
unsigned char* p_out;
unsigned char temp;
int width_plus_in;
int width_plus_out;
if (!(Bmpsrc_p && DesBitmap_p) || !(Bmpsrc_p->BmpData && DesBitmap_p->BmpData))
return FALSE;
width_plus_in = Bmpsrc_p->pitch*8 - Bmpsrc_p->Width;
width_plus_out = DesBitmap_p->pitch*8 - DesBitmap_p->Width;
memset(DesBitmap_p->BmpData, 0, DesBitmap_p->Size);
for(y=0; y< DesBitmap_p->Height; y++)
{
for(x=0; x < DesBitmap_p->Width; x++)
{
in_x = pixel_map(x, Bmpsrc_p->Width, DesBitmap_p->Width);
in_y = pixel_map(y, Bmpsrc_p->Height, DesBitmap_p->Height);
p_in = (char*)Bmpsrc_p->BmpData + byte_offset(in_x,in_y,Bmpsrc_p->pitch);
temp = (*p_in & bit_mask(in_x)) ? 1 : 0;
p_out = (char*)DesBitmap_p->BmpData + byte_offset(x, y, DesBitmap_p->pitch);
if (temp == 1)
*p_out |= bit_mask(x);
else
*p_out &= ~bit_mask(x);
}
}
return TRUE;
}