如何在CB中对JPG文件进行操作?

ktcserver 2004-10-25 04:03:13
我想进行如下操作,无论调用的JPG是多少像素的,都转换成为120*100像素,然后旋转90度,并且在打印的时候为3.5cm*4.2cm,代码将如何写啊,在TImages控件中或TDBImages控件中如何实现呢?
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ktcserver 2004-10-26
  • 打赏
  • 举报
回复
旋转90°的方法:
bool TForm1::Right90(Graphics::TBitmap * SrcBitmap)
{
TRect rt;
rt.Left = 0;
rt.Top = 0;
rt.Right = SrcBitmap->Height;
rt.Bottom = SrcBitmap->Width;
SrcBitmap-> PixelFormat = pf24bit;
Graphics::TBitmap* DstBitmap = new Graphics::TBitmap;
DstBitmap->Width=SrcBitmap->Height;
DstBitmap->Height=SrcBitmap->Width;
DstBitmap->PixelFormat = pf24bit;
BITMAP Bmp0, Bmp1; int nPitch0, nPitch1;
GetObject(SrcBitmap->Handle, sizeof(BITMAP), &Bmp0);
GetObject(DstBitmap->Handle, sizeof(BITMAP), &Bmp1);
nPitch0 = ((Bmp0.bmWidth*Bmp0.bmBitsPixel+31)/32)*4;
nPitch1 = ((Bmp1.bmWidth*Bmp0.bmBitsPixel+31)/32)*4;
//假设是顺时针旋转90度
for(int h=0; h<Bmp0.bmHeight; h++)
{
BYTE* Bits0 = (BYTE*)Bmp0.bmBits + nPitch0 * h;
for(int w=0; w<Bmp0.bmWidth; w++)
{
int w1 = h, h1 = Bmp0.bmWidth-1-w;
memcpy((BYTE*)Bmp1.bmBits+(w1*3+nPitch1 *h1), Bits0, 3);
Bits0 += 3;
}
}
SrcBitmap -> Height = DstBitmap->Height;
SrcBitmap -> Width = DstBitmap->Width;
SrcBitmap -> Canvas -> StretchDraw(rt,DstBitmap);
delete DstBitmap;
return true;
}
wt_sanlian 2004-10-26
  • 打赏
  • 举报
回复
我这有一段将TBitmap的尺寸重新设定的代码,可以供汝参考

bool ResizeBitmap(Graphics::TBitmap * SrcBitmap,int BWidth,int BHeight)
{
Graphics :: TBitmap * DstBitmap;
DstBitmap = new Graphics::TBitmap;

DstBitmap -> Width = BWidth;
DstBitmap -> Height = BHeight;

TRect rt;
rt.Left = 0;
rt.Top = 0;
rt.Right = BWidth;
rt.Bottom = BHeight;
DstBitmap -> Canvas -> StretchDraw(rt,SrcBitmap);

SrcBitmap -> Height = BHeight;
SrcBitmap -> Width = BWidth;

SrcBitmap -> Canvas -> StretchDraw(rt,DstBitmap);

delete DstBitmap;
return true;
}
ktcserver 2004-10-26
  • 打赏
  • 举报
回复
自己顶~~~~~~

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧