社区
图形处理/算法
帖子详情
100分求教:怎样用VC编写一个程序,能实现读取一个BMP图片,改变大小后,保存为新的BMP图片!
brave_yh
2007-08-13 05:08:50
要求将352*288象素的BMP图片变成288*176的!
...全文
1040
10
打赏
收藏
100分求教:怎样用VC编写一个程序,能实现读取一个BMP图片,改变大小后,保存为新的BMP图片!
要求将352*288象素的BMP图片变成288*176的!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
han856914
2010-12-29
打赏
举报
回复
功能很强大。
frankieswan
2007-08-16
打赏
举报
回复
/*************************************/
CShrink.h
/***************************************/
#if !defined(AFX_SHRINKER_H__9C214094_0019_4DF9_AC6E_9E22F34E70D6__INCLUDED_)
#define AFX_SHRINKER_H__9C214094_0019_4DF9_AC6E_9E22F34E70D6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Shrinker.h : header file
typedef struct {
WORD x,y; // dimensions
WORD l; // bytes per scan-line (32-bit allignment)
BYTE *b; // bits of bitmap,3 bytes/pixel, BGR
} tWorkBMP; // 24-bit working bitmap*/
typedef struct tagpels1{
BYTE bred;
BYTE bgreen;
BYTE bblue;
}pels3;
typedef struct tagpels2{
BYTE data1;
BYTE data2;
}pels2;
//#define SHRBPATH "./pic_temp/shrbmp.bmp"
#define Alloc(p,t) (t *)malloc((p)*sizeof(t))
#define For(i,n) for ((i)=0;(i)<(n);(i)++)
#define iFor(n) For (i,n)
#define jFor(n) For (j,n)
class CShrinker
{
public:
CShrinker();
~CShrinker();
private:
WORD shrwith; //缩放宽
WORD shrhith; //缩放长
BITMAPFILEHEADER bf; //BMP 文件头
BITMAPINFOHEADER bmpHeader;//BMP 信息头
public:
// Operation
// HBITMAP CreateEmptyBitmap (WORD dx,WORD dy);
void SaveWorkingBitmap (tWorkBMP *w,HBITMAP b);
void ShrinkWorkingBitmap (tWorkBMP *a,tWorkBMP *b,WORD bx,WORD by);
void CreateBitmap (WORD dx,WORD dy,tWorkBMP *w);
//void SetBMIHeader (BITMAPINFO *b,short dx,short dy);
BOOL ShrinkPath(char *srcpath, char *destpath,WORD pwith,WORD phith,BYTE *content);
void CreateWorkingBitmap (WORD dx,WORD dy,tWorkBMP *w);
BOOL SaveOutFile(char *BmpFileName1,tWorkBMP *out);
//CString FindExtension(const CString& name);
//int FindFormat(const CString& ext);
public:
};
#endif
/***************************************
CShrink.cpp
/****************************************/
// Shrinker.cpp : implementation file
//
#include "stdafx.h"
#include "Shrinker.h"
CShrinker::CShrinker()
{
shrwith=128;
shrhith=128;
}
CShrinker::~CShrinker()
{
}
void CShrinker::CreateBitmap (WORD dx,WORD dy,tWorkBMP *w)
{
w->x=dx;
w->y=dy;
w->l=(dx+1)*3&0xfffc;
}
void CShrinker::CreateWorkingBitmap(WORD dx,WORD dy,tWorkBMP *w)
{
w->x=dx;
w->y=dy;
w->l=(dx+1)*3&0xfffc;
w->b=Alloc(w->l*dy,BYTE);
}
//**************************************/
/*这里只针对24位真采,即3个BYTE表示一个
/*象素的情况
/*bmppath: 要进行缩放的BMP文件
//**************************************/
BOOL CShrinker::ShrinkPath(char *srcpath, char *destpath,WORD pwith,WORD phith,BYTE *content )
{
long With;
long High;
WORD bx,by;
tWorkBMP in,out;
pels3 *image_content;
HFILE hf;
if((hf=_lopen(srcpath,OF_READ))==HFILE_ERROR) {
AfxMessageBox("导入文件错误");
return FALSE;
}
_lread(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lread(hf,(LPSTR)&bmpHeader,sizeof(BITMAPINFOHEADER));
With=bmpHeader.biWidth;
High=bmpHeader.biHeight;
CreateBitmap(bmpHeader.biWidth,bmpHeader.biHeight,&in);
image_content=(pels3 *)malloc(With*High*3);
in.b=(BYTE *)image_content;
_lread(hf,(LPSTR)(in.b),With*High*3);
ShrinkWorkingBitmap(&in,&out,pwith,phith);
memcpy(content,out.b,pwith*phith*3);
SaveOutFile(destpath,&out);
free(image_content);
free(out.b);
return TRUE;
}
void CShrinker::ShrinkWorkingBitmap (tWorkBMP *a,tWorkBMP *b,WORD bx,WORD by)
{
BYTE *uy=a->b,*ux,i;
WORD x,y,nx,ny=0;
DWORD df=3*bx,nf=df*by,j;
float k,qx[2],qy[2],q[4],*f=Alloc(nf,float);
CreateWorkingBitmap (bx,by,b);
jFor (nf) f[j]=0;
j=0;
For (y,a->y) {
ux=uy;
uy+=a->l;
nx=0;
ny+=by;
if (ny>a->y) {
qy[0]=1-(qy[1]=(ny-a->y)/(float)by);
For (x,a->x) {
nx+=bx;
if (nx>a->x) {
qx[0]=1-(qx[1]=(nx-a->x)/(float)bx);
iFor (4) q[i]=qx[i&1]*qy[i>>1];
iFor (3) {
f[j]+=(*ux)*q[0];
f[j+3]+=(*ux)*q[1];
f[j+df]+=(*ux)*q[2];
f[(j++)+df+3]+=(*(ux++))*q[3];
}
}
else iFor (3) {
f[j+i]+=(*ux)*qy[0];
f[j+df+i]+=(*(ux++))*qy[1];
}
if (nx>=a->x) nx-=a->x;
if (!nx) j+=3;
}
}
else {
For (x,a->x) {
nx+=bx;
if (nx>a->x) {
qx[0]=1-(qx[1]=(nx-a->x)/(float)bx);
iFor (3) {
f[j]+=(*ux)*qx[0];
f[(j++)+3]+=(*(ux++))*qx[1];
}
}
else iFor (3) f[j+i]+=*(ux++);
if (nx>=a->x) nx-=a->x;
if (!nx) j+=3;
}
if (ny<a->y) j-=df;
}
if (ny>=a->y) ny-=a->y;
}
nf=0;
k=bx*by/(float)(a->x*a->y);
uy=b->b;
For (y,by) {
jFor (df) uy[j]=f[nf++]*k+.5;
uy+=b->l;
}
free (f);
}
BOOL CShrinker::SaveOutFile(char *BmpFileName1,tWorkBMP *out)
{
HFILE hf1;
BYTE buf1[14];
memset(buf1,6,14);
if((hf1=_lcreat(BmpFileName1,OF_CREATE))==HFILE_ERROR) {
AfxMessageBox("fali");
return FALSE;
}
bmpHeader.biWidth=shrwith;
bmpHeader.biHeight=shrhith;
_lwrite(hf1,(LPSTR)&bf,14);
_lwrite(hf1,(LPSTR)&bmpHeader,sizeof(bmpHeader));
_lwrite(hf1,(LPSTR)out->b,128*128*3);
//AfxMessageBox("缩放成功");
return true;
}
cangzhu
2007-08-15
打赏
举报
回复
StretchBlt
不行吗?
还是图象处理的算法??
guohua219
2007-08-14
打赏
举报
回复
用vc吧,就是图象缩放的问题哈~~~
主要用StretchBlt函数~~
当然前面你得弄清如何打开个图象~~
smallfishff
2007-08-14
打赏
举报
回复
基础类中已回答你问题了 还是说 如果外挂程序 用VB比较适合.
emptyness
2007-08-14
打赏
举报
回复
接分...百度..
圆圆木公
2007-08-14
打赏
举报
回复
http://download.csdn.net/source/172443这里有代码下载的
jun_01
2007-08-13
打赏
举报
回复
核心函数:StretchBlt
剩下的步骤也不难,去找找资料吧,如果用gdi+就更简单了。
ps,如果用c#,估计10行左右的代码就可以完成。vc如果不用gdi+估计得100行。
海鸥先生
2007-08-13
打赏
举报
回复
还有这个:
http://dev.yesky.com/164/2291664.shtml
海鸥先生
2007-08-13
打赏
举报
回复
希望这个对你有帮助:
http://mti.xidian.edu.cn/multimedia/multi/course1-6-1.html
数据处理救星降世Power Query
0/ Excel数据处理
新
利器来了,准备好了吗? 1/ 比网红函数VLOOKUP还全面的功能。——查(查询) 2/ 取其精华,去其糟粕。——筛(筛选) 3/ 拆
分
就像同学会,拆散一对是一对。——拆(拆
分
) 4/ 天下大势,合久必
分
...
我在CSDN参与的3000个帖子
2:
100
分
急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,...
基础
用
vc
++调试编制的组件怎样画
一个
箭头?高
分
请教如何限制
程序
运行的方法?求助:通过编程DirectX抓屏------>masterz:再麻烦你一下,谢谢熟悉RichEdit的朋友过来看一下,RichEdit的几个问题.如何对 I/O 端口进行操作?有...
CSDN回帖得
分
大全(近两年)
√vs2005调用dll的时候Initialize()函数返回错误 [
VC
/MFC 基础类] 40 ylongwu 05-21 20:486 ylongwu06-28 13:42管理√为什么我创建登陆框之后,然后获取登陆框的数据时候总是... [
VC
/MFC 基础类]
100
wysbk002 05-22
链接:MSDN UserNet等
Q我想知道如何在
VC
中
实现
可塌陷的PanelBar界面(类似于OutlookBar)? T可塌陷的PanelBar界面比outlookbar更有吸引力,Windows XP左边的导航工具面版就是采用这种风格,采用这种风格的应用
程序
也越来越多,比如各种...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章