我是硬件工程师,公司需要做一款SDK,被逼学习下MFC,现在需要一个功能,就是在指定路径下例如:C:\查找所有BMP文件,并将文件名叠加到图片中,保存为原文件名的BMP文件,谁能给个例程,或者指导一下,因为我是新手,而且是自学的,一点基础都没有,所以越详细越好,谢谢了。

解决方案 »

  1.   

    MFC的话,用CFindFile可以查找文件,建议将找到的文件名放在一个动态数组中,然后对每一个BMP文件进行处理,将文件名写进去。写的方法,我建议用LoadImage加载BMP文件,选进一内存DC中,然后用TextOut写文件名,再保存文件。
    说起来几句话,做起来代码比较长,但是并不是很难。
      

  2.   

    回3楼,我是新手,对你们高手来说比较容易的问题,对我来说就很难了,我现在可以把文件夹下所有的*.BMP文件的名字提取出来了,但是后面的步骤还是不清楚,能否说的更详细些,谢谢
      

  3.   

    第一步:
    CDC MemDC;//定义一个DC
    用MemDC.CreateCompatibleDC创建一个兼容DC。
    用LoadImage将你的文件加载进来。HBitmap hBitmap=::LoadImage(NULL,"文件路径",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    用MemDC.SelObject将上面的hBitmap加载进DC中
    第二步:
    调用MemDC.TextOut将路径信息写进DC中。
    第三步:
    写文件,这个代码比较长,将一个hBitmap位图对象写进文件的代码你可以看这个:http://blog.csdn.net/wltg2001/archive/2008/04/17/2300258.aspx
      

  4.   

    非常感谢wltg2001,我按你指点的步骤前两步已经通过了,在将位图对象写进文件的时候除了点问题
     *lpbi=bi;//将bi中的数据写入分配的内存中。
     HDC hdc=::GetDC(NULL);
    我在这设了断点,发现每次跑到这的时候都会报错。
    Setting.exe 中的 0x005452f7 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突
    请问可能是什么原因造成的呢?
      

  5.   

     HDC hdc=::GetDC(NULL);
    ========
    这个不对,GetDC(NULL)取的是屏幕的DC啊,你应该用一个窗体的HWND作参数,或者不用GetDC,而用别的。
      

  6.   

    哎呀,不必那么难,搞个vb.net(vs2008、vs2005、vs2003或vs.net)就可以解决。如果文件名以水印形式要难点,如果已覆盖形式就很简单了,给你一段代码:Private Sub ImageOperator(ByVal image_stream As Stream, _
                              ByVal new_image_stream As Stream)
            Dim i As Integer
            Dim j As Integer
            Dim c As Color
            Dim bit_map As Bitmap
            Dim new_bit_map As New Bitmap(new_image_stream)'        Dim _image1 As Image ' = Image.FromFile("c:\my document\my picture\my.jpg")
    '        _image1 = Image.FromStream(image_stream)
    '        bit_map = New Bitmap(_image1)        For i = 0 To 256 - 1
                For j = 0 To 256 - 1                ' 注意下面两行代码 
                    c = bit_map.GetPixel(i, j)
                  new_bit_map.SetPixel(i, j, c)                Application.DoEvents()
                Next
            Next
            
            ' 下面一段没有经过调试,是大概意思,如果不急我再该你一个调试过的,或者你把问题说得再清楚一点我直接给你一个完整的代码。        new_bit_map.drawString("c:\my document\my pictures\my.jpg",font,x,y) End Sub
      

  7.   

    朋友
    他说要自己开发一套SDK
    肯定是要配合他的硬件使用的
    这个帖子只是一个功能而已
      

  8.   

    老兄,你在VC区说VB,是不是过分了点,当我们VC区没人吗?
      

  9.   

    我想不会是配合硬件的,因为这一部分是纯软件,要在操作系统的文件系统作事情,至于sdk我想要找到相应的开发平台就可以了,在Windows3.x时代使用ms vc 5.0写过sdk,后来就不再写了,已经不能提供直接的代码了,只能给出一般的方法。
      

  10.   

    图片处理复杂的话可以考虑第三方控件CxImage类
      

  11.   

    老兄,我不是高手来着,我只是觉得,VC区里的人,会VB的不多,你贴VB代码,起到的作用不大,还不如直接说原理还好一点。
      

  12.   

    vb代码如此简单,如果不是涉及具体的函数,算法是相同的,你看不懂并不说明别人看不懂,我就能看懂vc++代码,然后解决我的vb问题,如果让我写一段vc++代码,可能比你写得好,只是开发平台不如你熟悉罢了。如果我们不是在sdk层次上解决问题的话,最好还是使用vb代码或c#代码,这样开发效率会很高的,我使用了十年c++后来把它扔掉了,为什么?我是一个经常把
    i++;

    ++i;
    搞混的人,调试程序总离不开书本,总是要去区分他俩的含义,不知你是否有此体会,也许你比我智商高没有这样的烦恼,现在好了使用vb或c#就不用老是身边有本书了。今天说了些多余的话,以后咱们(红猪)再调侃。熟悉一种语言不是一个程序员的本事,真正熟悉一个开发平台解决具体问题才是一个程序员的真正所在。
    另:打一堆分号多烦啊!如果你使用vs2008开发平台的vb话,所有的封闭语句都由开发平台智能地自动封闭,这时你才感到一个程序员写程序有多么的舒服啊。
      

  13.   

    早上一来就看到这么多回复,很是感谢大家的关注,尤其谢谢wltg2001,不厌其烦的帮忙指点。我们确实是有自己的硬件,是连接高清视频整机的,我以前一直是做机芯的硬件驱动和控制部分,突然转做软件了,因为之前误打误撞用别人的例子改成了一款当时可以凑合用的SDK,所以这次这活又落到我头上了,我们这全是硬件工程师,唯一的软件工程师回家休产假了。。
      

  14.   

    原来如此
    你们的软件工程师居然是女的
    呵呵其实软件的东西说难也难
    说简单也简单
    不要太担心
    有问题就过来问问吧
    大家都会很热心的
    wltg2001确实是好人
      

  15.   

    我把http://blog.csdn.net/wltg2001/archive/2008/04/17/2300258.aspx里的语句都贴到函数里了,编译都通过了,在执行到
    *lpbi=bi;
    会提示:Setting.exe 中的 0x005a12c7 处最可能的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突。
    请问下怎么解决这?
      

  16.   

    你可以试试CImage
    一个save函数就搞定了
      

  17.   

    我的函数是这样的,请帮忙指点下。
    int CSettingDlg::OnDraw()
    {       CDC MemDC;//
    CString strpath;
    CSettingApp *app=(CSettingApp *)AfxGetApp();
    MemDC.CreateCompatibleDC(NULL);
    strpath.Format( _T( "%s\\1206.bmp" ), app->BtcaPatha);
    HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,strpath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   
    MemDC.SelectObject(hBitmap);
    MemDC.TextOutW(20,20,strpath);
    WORD wbitsCount;
    DWORD dwpalettelsize=0;
    DWORD dwbmdibitsize,dwdibsize,dwwritten;
    BITMAP bitmap;
    BITMAPFILEHEADER bmfhdr;
    BITMAPINFOHEADER bi;
    LPBITMAPINFOHEADER lpbi;
    HANDLE fh,fdib;
    GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
    wbitsCount=bitmap.bmBitsPixel;
    bi.biSize=sizeof(BITMAPINFOHEADER);
    bi.biWidth=bitmap.bmWidth;
    bi.biHeight=bitmap.bmHeight;
    bi.biPlanes=1;
    bi.biBitCount= bitmap.bmBitsPixel ;
    bi.biClrImportant=0;
    bi.biClrUsed=0;
    bi.biCompression=BI_RGB;
    bi.biSizeImage=0;
    bi.biYPelsPerMeter=0;
    bi.biXPelsPerMeter=0;
    if(wbitsCount<=8)dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
    dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
            fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
            lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
        *lpbi=bi;//将bi中的数据写入分配的内存中。
            HDC hdc=::GetDC(NULL);
            GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
            fh=CreateFile(strpath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
            if(fh==INVALID_HANDLE_VALUE)
                 return false;
            bmfhdr.bfType=0x4d42;
            dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
            bmfhdr.bfSize=dwdibsize;
            bmfhdr.bfReserved1=0;
            bmfhdr.bfReserved2=0;
    bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
    WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
    WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
    ::GlobalUnlock(fdib);
    ::GlobalFree(fdib);
    ::CloseHandle(fh);
    return TRUE;
    }
      

  18.   

    说来很惭愧,其实我一点基础都没有,完全是到处找例程,然后移植到自己的程序里,出错的时候就分析下,或者到网上查一下,所以xianglitian(向立天)说的CImage我也是完全不懂。
      

  19.   


    所以我上面回帖的时候说你们这个情况其实应该包出去给别人做
    呵呵
    CImage很简单你上网搜搜就好了
    至于你现在这个方法我想wltg2001看到了就会恢复你的
    一会有时间我也会帮你看看
      

  20.   

    我又自己试了一下代码,发现没有问题啊?可以将文件名写进BMP文件中,也没有报错,就用你上面的代码,不过我没有用你的代码中的文件路径,而是直接用“1.bmp"试的。我是写在一个按钮事件中的:
    void CdfdffDlg::OnBnClickedButton1()
    {
    CDC MemDC;//
    CString strpath;
    //CSettingApp *app=(CSettingApp *)AfxGetApp();MemDC.CreateCompatibleDC(NULL);
    //strpath.Format( _T( "%s\\1206.bmp" ), app->BtcaPatha);
    HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   
    MemDC.SelectObject(hBitmap);
    MemDC.TextOut(20,20,"1.bmp");
    WORD wbitsCount;
    DWORD dwpalettelsize=0;
    DWORD dwbmdibitsize,dwdibsize,dwwritten;
    BITMAP bitmap;
    BITMAPFILEHEADER bmfhdr;
    BITMAPINFOHEADER bi;
    LPBITMAPINFOHEADER lpbi;
    HANDLE fh,fdib;
    GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
    wbitsCount=bitmap.bmBitsPixel;
    bi.biSize=sizeof(BITMAPINFOHEADER);
    bi.biWidth=bitmap.bmWidth;
    bi.biHeight=bitmap.bmHeight;
    bi.biPlanes=1;
    bi.biBitCount= bitmap.bmBitsPixel ;
    bi.biClrImportant=0;
    bi.biClrUsed=0;
    bi.biCompression=BI_RGB;
    bi.biSizeImage=0;
    bi.biYPelsPerMeter=0;
    bi.biXPelsPerMeter=0;
    if(wbitsCount<=8)dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
    dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
      fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
      lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
    *lpbi=bi;//将bi中的数据写入分配的内存中。
      HDC hdc=::GetDC(NULL);
      GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
      fh=CreateFile("1.bmp",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
      if(fh==INVALID_HANDLE_VALUE)
      return ;
      bmfhdr.bfType=0x4d42;
      dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
      bmfhdr.bfSize=dwdibsize;
      bmfhdr.bfReserved1=0;
      bmfhdr.bfReserved2=0;
    bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
    WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
    WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
    ::GlobalUnlock(fdib);
    ::GlobalFree(fdib);
    ::CloseHandle(fh);
    return ;
    }
    如果实在不行,将工程发我邮箱吧,有时间我调一下。[email protected]
      

  21.   

    你看一下你的LoadImage是不是成功了。我怀疑你的文件路径有问题。
      

  22.   

    很不好意思,还是要麻烦各位,我的程序在跑这句的时候
    HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   
    会提示error C2664: “LoadImageW”: 不能将参数 2 从“const char [9]”转换为“LPCWSTR”
    所以必须要用HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("1.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 这种形式,是什么原因造成的呢?我在网上找别的例程的时候也经常遇到这种情况,别人跑的好好的程序,到我这就必须要改动。
      

  23.   

    HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("1.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   
      

  24.   

    是工程字符集的问题
    你用的是默认的Unicode字符集
    所以这里要做一个转换
    具体的你不必太了解
      

  25.   

    哦,谢谢。
    我在执行完这句之后得到hBitmap的值是0x00000000,这个是不是不对?
      

  26.   

    另外我写成HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("C:\1206.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
    就是提取C盘下的1206.bmp文件,这样写没问题吧?
      

  27.   

    哦,谢谢。
    我在执行完这句之后得到hBitmap的值是0x00000000,这个是不是不对?
    ==================
    这个当然不对,说明LoadImage没有成功,很可能是文件路径的问题。
      

  28.   

    另外我写成HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("C:\1206.bmp")
    ==================
    写成:HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("C:\\1206.bmp")
      

  29.   

    改成:HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,_T("C:\\1206.bmp")
    之后还是不对,是不是因为我的BMP文件有问题?
    我的BMP文件是通过JGP转的,用的是
    fread(buf,1,200000,fp);
    fwrite(buf,1,200000,fpp);
    这两条命令生成的
      

  30.   

    你愣转的?!!
    你用photoshop另存为试试
      

  31.   

    我的BMP文件是通过JGP转的,用的是
    fread(buf,1,200000,fp);
    fwrite(buf,1,200000,fpp);
    这两条命令生成的
    =========
    这两个能将JPG转成BMP?不可能的!用工具转吧!PS或是ACDSEE都可以。
      

  32.   

    其实我的原目的是把JPG叠加上名字之后保存,不过我在网上查到的都是BMP叠加的,所以我想了个方法生成了BMP文件,而且确实出现了BMP呵,难道是假的?具体程序如下:
    void CSettingDlg::OnBnClickedBtnAdd()
    { CString strFileTitle;
    CString strpath;
    CFileFind finder; 
    char   *   a=new   char[260]; 
    TCHAR* buf = new TCHAR[1024*1024];
    CSettingApp *app=(CSettingApp *)AfxGetApp();
    strpath+=app->BtcaPatha;
    strpath+="*.jpg";
    BOOL bWorking = finder.FindFile (strpath); 
    while(bWorking) 

    bWorking=finder.FindNextFile();
    strFileTitle=finder.GetFileTitle(); 
    strpath=finder.GetFilePath();
    FILE *fp = _tfsopen( strpath, _T( "rb" ), _SH_DENYNO );
    fread(buf,1,200000,fp);
    fclose(fp); strpath.Format( _T( "%s\\%s.bmp" ), app->BtcaPatha, strFileTitle);
    FILE *fpp = _tfsopen( strpath, _T( "wb" ), _SH_DENYNO );
    fwrite(buf,1,200000,fpp);
    fclose(fpp);

    int aa=OnDraw();
    }
      

  33.   

    其实我的原目的是把JPG叠加上名字之后保存,不过我在网上查到的都是BMP叠加的,所以我想了个方法生成了BMP文件,而且确实出现了BMP呵,难道是假的?具体程序如下:
    void CSettingDlg::OnBnClickedBtnAdd()
    { CString strFileTitle;
    CString strpath;
    CFileFind finder; 
    char   *   a=new   char[260]; 
    TCHAR* buf = new TCHAR[1024*1024];
    CSettingApp *app=(CSettingApp *)AfxGetApp();
    strpath+=app->BtcaPatha;
    strpath+="*.jpg";
    BOOL bWorking = finder.FindFile (strpath); 
    while(bWorking) 

    bWorking=finder.FindNextFile();
    strFileTitle=finder.GetFileTitle(); 
    strpath=finder.GetFilePath();
    FILE *fp = _tfsopen( strpath, _T( "rb" ), _SH_DENYNO );
    fread(buf,1,200000,fp);
    fclose(fp); strpath.Format( _T( "%s\\%s.bmp" ), app->BtcaPatha, strFileTitle);
    FILE *fpp = _tfsopen( strpath, _T( "wb" ), _SH_DENYNO );
    fwrite(buf,1,200000,fpp);
    fclose(fpp);

    int aa=OnDraw();
    }
      

  34.   

    看来真的是我硬转的问题,我换了张现成的BMP就没问题,用我自己生成的就不行。
    这下难办了,还得找个把JPG转BMP的程序。
      

  35.   

    CImage
    load
    save
    搞定
      

  36.   

    呃能给个例子不?比如C盘下的1206.JPG怎么转的?
      

  37.   

    我不太愿意往C盘上放乱七八糟的东西
    写个D盘的代码啊
    CImage imgTransfer;
    imgTransfer.Load(_T("D:\\1206.JPG"));
    imgTransfer.Save(_T("D:\\1206.bmp"));
      

  38.   

    CImage类就是方便啊!以后我也改用这个,以前真没用过。
      

  39.   

    谢谢两位不厌其烦的指点,真的非常感谢
    “CImage”: 未声明的标识符
    这个我需要怎么办?
      

  40.   

    while(bWorking) 

    bWorking=finder.FindNextFile();
    strFileTitle=finder.GetFileTitle(); 
    strpath=finder.GetFilePath();
    CImage imgTransfer;
    imgTransfer.Load(strpath);
    strpath.Format( _T( "%s\\%s.bmp" ), app->BtcaPatha, strFileTitle);
    imgTransfer.Save(strpath);
    CDC MemDC;
    MemDC.CreateCompatibleDC(NULL);
    HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,strpath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    MemDC.SelectObject(hBitmap);
    MemDC.TextOutW(10,10,_T("123456789"));
    WORD wbitsCount;
    DWORD dwpalettelsize=0;
    DWORD dwbmdibitsize,dwdibsize,dwwritten;
    BITMAP bitmap;
    BITMAPFILEHEADER bmfhdr;
    BITMAPINFOHEADER bi;
    LPBITMAPINFOHEADER lpbi;
    HANDLE fh,fdib;
    GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
    wbitsCount=bitmap.bmBitsPixel;
    bi.biSize=sizeof(BITMAPINFOHEADER);
    bi.biWidth=bitmap.bmWidth;
    bi.biHeight=bitmap.bmHeight;
    bi.biPlanes=1;
    bi.biBitCount= bitmap.bmBitsPixel ;
    bi.biClrImportant=0;
    bi.biClrUsed=0;
    bi.biCompression=BI_RGB;
    bi.biSizeImage=0;
    bi.biYPelsPerMeter=0;
    bi.biXPelsPerMeter=0;
    if(wbitsCount<=8)dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
    dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
            fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
            lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
        *lpbi=bi;//将bi中的数据写入分配的内存中。
          HDC hdc=::GetDC(NULL);
            GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
            fh=CreateFile(strpath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
            if(fh==INVALID_HANDLE_VALUE)
            bmfhdr.bfType=0x4d42;
            dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
            bmfhdr.bfSize=dwdibsize;
            bmfhdr.bfReserved1=0;
            bmfhdr.bfReserved2=0;
    bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
    WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
    WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
    ::GlobalUnlock(fdib);
    ::GlobalFree(fdib);
    ::CloseHandle(fh); imgTransfer.Load(strpath);
    strpath.Format( _T( "%s\\%s.jpg" ), app->BtcaPatha, strFileTitle);
    imgTransfer.Save(strpath);
    }
    这是我新的代码基本是两位的集合,但是现在是把原来50多K的JPG变成了10多K,而且还没叠加上字符。
      

  41.   

    而且会留下一个1M多的BMP,但这个BMP文件无法预览。
      

  42.   

    这是我新的代码基本是两位的集合,但是现在是把原来50多K的JPG变成了10多K,而且还没叠加上字符。
    ==========
    CImage没用过,不发表意见了,但是你上面的代码应该还是有问题的,用CImage的方便之处就是保存文件时只用Save方法就行了,那上面我给的那么一大段代码就可以不用。
      

  43.   

    我是把一个文件夹下的所有JPG文件先转成BMP文件,然后用你教我的方法在BMP文件上叠加字符,再把叠加好的BMP文件转换成JPG文件,完成我最初的目的把JPG文件叠加字符的。
      

  44.   

    我觉得你这个问题纠结太久了
    而且你用的方法本身就有问题
    完全可以读出jpg
    直接操作
    然后再存回去
    当然你具体的应用我们不了解
    你仔细研究一下吧
      

  45.   

    呃能在JPG直接操作最好啊,我是看到网上大部分的帖子都是对BMP操作才想把JPG转成BMP的
    如果直接对JPG叠加怎么处理啊?
      

  46.   

    就是在内存里画一下然后在存盘么
    CImage村jpg的指标比较低
    具体怎么调整压缩比我也没有研究过
    你开始说要把jpg转bmp我才推荐你使用的
    如果你要存回jpg就要自己研究了
      

  47.   

    用Cimage load之后能直接叠加字符吗?
      

  48.   

    或者说有其他方法给JPG叠加吗?这几天去做了个其他功能,今天转回来做这个图片处理了。
      

  49.   

    非常感谢两位的帮助,我准备研究下Cximage来做这个功能了。
      

  50.   


    在源文件开头添加 #include "atlimage.h"