不是 就是一张图片上的预留位置写一些文字
图片是jpg或bmp格式的
图片是jpg或bmp格式的
解决方案 »
- 一个类定义中多个protected,功能有不同吗?
- CPropertySheet求助
- vs2003创建win32项目出错,急救!
- 申请一个CSocket类的实例,使用UDP协议,能否既发送又接收呢?
- 如果在DLL中引用资源,如对话筐
- listview中如何实现类示treeview那种子列表功能.例如MSN的列表和浩方对战平台左边的功能
- 我從CWinThread類繼承一個新類CMyThd之後,為何構造函數是保護的?
- 水园是什么地方?
- 求助 大恒相机编程时 *(首指针+行数*每行长度+列数*3+分量号)谁能解释下
- 为什么不能正常获取CRichEditCtrl里的文本?救人一命~胜造7级浮屠啊~~
- mfc问题
- 求助:在MFC项目中,API申请内存失败,该怎么解决?
图片是jpg或bmp格式的
可以由调用该dll的应用 传递PDC或者HWND给该dll,然后就可以来做绘制了
可以由调用该dll的应用 传递PDC或者HWND给该dll,然后就可以来做绘制了
主要是接口已经定义好了 ,不能传递PDC如何得到?
可以由调用该dll的应用 传递PDC或者HWND给该dll,然后就可以来做绘制了
主要是接口已经定义好了 ,不能传递PDC如何得到?接口就算定义好了,也可以修改啊!
可以由调用该dll的应用 传递PDC或者HWND给该dll,然后就可以来做绘制了
主要是接口已经定义好了 ,不能传递PDC如何得到?接口就算定义好了,也可以修改啊!
接口是别人定的,不能改。
Bitmap bmp(L"C:\\1.bmp"); Graphics mygraphics(&bmp);
SolidBrush brush( Color(100,0,0,255) );
FontFamily fontFamily(L"宋体"); //选择一种字体 Font font( &fontFamily, 1, FontStyleRegular,UnitInch );
PointF pointF(5,5); mygraphics.DrawImage(&bmp,0,0);
mygraphics.DrawString( L"Hello Word!", -1, &font, pointF, &brush ); bmp.Save(L"C:\\2.bmp",&Gdiplus::ImageFormatBMP, NULL);
这段代码保存的图片咋是空的啊???
可以由调用该dll的应用 传递PDC或者HWND给该dll,然后就可以来做绘制了
主要是接口已经定义好了 ,不能传递PDC如何得到?我使用了图片路径但是保存图片时,图片为空。代码在楼上
#include "AtlImage.h"CImage im;
im.Load("xxx.bmp");
HDC dc = im.getdc();
DrawText(dc,"Hello",.....);
im.save("newname.bmp");
你考察一下是否要ReleaseDC。我忘记了。
自己载入文件得到HBITMAP,然后画到一个虚拟dc(双缓冲办法)上,再写字,然后干掉虚拟dc,剩下那个做双缓冲时的HBITMAP。这个HBITMAP就是那张写了字的图。再想办法把这个HBITMAP存成文件即可。但是还是建议用CAtlImage,这都是微软大拿们写的类。比我们自己可靠性高啊
{
PrintDebug_W(_SELF,__LINE__,L"TextInBMPFile 开始");
FILE *fp; //char* tExt=" A B C D E";
BITMAPFILEHEADER bf;
BITMAPINFOHEADER head;
// DWORD dwImgSize; if((fp=fopen(strSrcFN, "rb "))==NULL)
{
MessageBoxA(NULL, "File open error ", "error ",MB_OK);
return;
}
fread(&bf,1,14,fp);
fseek(fp, sizeof(BITMAPFILEHEADER),0);
fread(&head,sizeof(BITMAPINFOHEADER),1,fp);
//获取图像宽、高、每像素所占位数等信息
int bmpWidth = head.biWidth;
int bmpHeight = head.biHeight;
//biBitCount = head.biBitCount;
//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
int lineByte=bmpWidth * 2;
//灰度图像有颜色表,且颜色表表项为256
//申请位图数据所需要的空间,读位图数据进内存
//pBmpBuf=new unsigned char[lineByte * bmpHeight];
unsigned char *buf=new unsigned char[lineByte*bmpHeight];
fread(buf,1,lineByte * bmpHeight,fp);
head.biHeight=head.biHeight+120;
bf.bfSize=bf.bfSize+head.biWidth*120*2;
fclose(fp);
fp = fopen(strDstFN, "wb");
if(!fp)
return;
fwrite(&bf,1,14,fp);
fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp);
byte temp[2]={0xFF,0xFF};
for (int i=0;i<head.biWidth*120;i++)
{
fwrite(temp,2,1,fp);
} fwrite(buf,1,lineByte * bmpHeight,fp);
////////////////////////////////////////////////////
fclose(fp);
//////////////////////////////////
//FILE *fp;
//BITMAPFILEHEADER bf;
LPBITMAPINFOHEADER lpbi;
DWORD dwImgSize;
HDC MemDC;
HBITMAP bitmap; if((fp=fopen(strDstFN, "rb "))==NULL)
{
MessageBoxA(NULL, "File open error ", "error ",MB_OK);
return;
}
fread(&bf,1,14,fp);
dwImgSize=bf.bfSize-14;
lpbi=(LPBITMAPINFOHEADER)malloc(dwImgSize);
fread(lpbi,1,dwImgSize,fp);
fclose(fp);
MemDC=CreateCompatibleDC(NULL);
bitmap = CreateDIBitmap(GetDC(NULL), // handle to device context
lpbi, // pointer to bitmap size and format data
CBM_INIT, // initialization flag
(PBYTE)lpbi+40, // pointer to initialization data
(BITMAPINFO*)lpbi, // pointer to bitmap color-format data
DIB_RGB_COLORS); // color-data usage
if (bitmap)
{
SelectObject(MemDC,bitmap);
SetBkMode(MemDC,TRANSPARENT);
SetTextColor(MemDC,RGB(255,0,0));
TextOutA(MemDC,x,y,text,strlen(text));
y=y+20;
TextOutA(MemDC,x,y,Atext,strlen(Atext));
y=y+20;
TextOutA(MemDC,x,y,BText,strlen(BText));
y=y+20;
TextOutA(MemDC,x,y,CText,strlen(CText));
y=y+20;
TextOutA(MemDC,x,y,DText,strlen(DText));
y=y+20;
TextOutA(MemDC,x,y,EText,strlen(EText));
GetDIBits(MemDC,bitmap,1,lpbi-> biHeight,(PBYTE)lpbi+40,(LPBITMAPINFO)lpbi,DIB_RGB_COLORS);
}
if((fp=fopen(strDstFN, "wb "))==NULL)
{
MessageBoxA(NULL, "File open error ", "error ",MB_OK);
return;
}
fwrite(&bf,1,14,fp);
fwrite(lpbi,1,dwImgSize,fp);
fclose(fp);
DeleteDC(MemDC);
delete [] buf;
//DeleteObject(bitmap);
// DeleteObject(MemDC);
}