导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

GDIPlus 图片保存出来命名问题

knwin 2009-07-30 04:11:25
我想用日期命名保存出来
int year,month,day,h,m,s;
CTime t=CTime::GetCurrentTime();
year=t.GetYear();
month=t.GetMonth();
day=t.GetDay();
h=t.GetHour();
m=t.GetMinute();
s=t.GetSecond();
CString str_date,filename;
str_date.Format("%d%d%d%d%d%d",year,month,day,h,m,s);
filename.Format("%s%s%s",".\\",str_date,".jpg");

::SaveCurScreenJpg(L".\\cap.800.600.100.jpg", 1024,768,100);

这个地方改为::SaveCurScreenJpg(L filename, 1024,768,100); 编译不成功,请高指点
...全文
107 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
knwin 2009-07-31
问题已经解决

wchar_t *wszData=new wchar_t[strlen(filename)+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,filename,-1,wszData,strlen(filename)+1);
回复
knwin 2009-07-30
楼上回复的都不行
我把这个代码都贴出来
#include <gdiplus.h>
是gdi的一个图片类.要网上下载


int GetEncoderClsid(LPCWSTR format, CLSID* pClsid)
{
UINT num = 0;
UINT size = 0;

ImageCodecInfo* pImageCodecInfo = NULL;

GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;

pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1;

GetImageEncoders(num, size, pImageCodecInfo);

for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}

free(pImageCodecInfo);
return -1;
}
// 参数
// xs = 图象x轴大小
// ys = 图象y轴大小
// quality = jpeg图象质量

VOID SaveCurScreenJpg(LPCWSTR pszFileName, int xs, int ys, int quality)
{
HWND hwnd = ::GetDesktopWindow();
HDC hdc = GetWindowDC(NULL);
int x = GetDeviceCaps(hdc, HORZRES);
int y = GetDeviceCaps(hdc, VERTRES);
HBITMAP hbmp = ::CreateCompatibleBitmap(hdc, x, y), hold;
HDC hmemdc = ::CreateCompatibleDC(hdc);
hold = (HBITMAP)::SelectObject(hmemdc, hbmp);
BitBlt(hmemdc, 0, 0, x, y, hdc, 0, 0, SRCCOPY);
SelectObject(hmemdc, hold);
{
Bitmap bit(xs, ys), bit2(hbmp, NULL);
Graphics g(&bit);
g.ScaleTransform((float)xs/x, (float)ys/y);
g.DrawImage(&bit2, 0, 0);

CLSID encoderClsid;
EncoderParameters encoderParameters;

encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &quality;

GetEncoderClsid(L"image/jpeg", &encoderClsid);
bit.Save(pszFileName, &encoderClsid, &encoderParameters);
}
::DeleteObject(hbmp);
::DeleteObject(hmemdc);
return;
}
void CSVCHOSTDlg::OnTimer(UINT nIDEvent)
{
int year,month,day,h,m,s;
CTime t=CTime::GetCurrentTime();
year=t.GetYear();
month=t.GetMonth();
day=t.GetDay();
h=t.GetHour();
m=t.GetMinute();
s=t.GetSecond();
CString str_date,filename;
str_date.Format("%d%d%d%d%d%d",year,month,day,h,m,s);
filename.Format("%s%s%s",".\\",str_date,".jpg");
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
::SaveCurScreenJpg(filename, 1024,768,100); //这个不行
::SaveCurScreenJpg(L".\\cap.800.600.200.jpg", 640, 480, 50); //这个可以会生成图片
GdiplusShutdown(gdiplusToken);
}
回复
aa3000 2009-07-30
CStringW filenameW = filename;
SaveCurScreenJpg(filenameW, 1024,768,100);
回复
雪影 2009-07-30
你应该使用了什么类库吧?
查找含有SaveCurScreenJpg函数的头文件,
将其#include之中
回复
aa3000 2009-07-30
::SaveCurScreenJpg(filename, 1024,768,100);
回复
aa3000 2009-07-30
SaveCurScreenJpg 是什么函数啊?哪来的?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……