MFC如何读取文件到内存,再写到磁盘?
我想了解一下文件的读写过程,能够将任意格式的文件先读入内存,再存储到磁盘其他位置。例如:C盘下有一张图片pic1.jpg,通过先读取到内存再写入到D盘下,名为pic2.j...
我想了解一下文件的读写过程,能够将任意格式的文件先读入内存,再存储到磁盘其他位置。例如:C盘下有一张图片pic1.jpg, 通过先读取到内存再写入到D盘下,名为pic2.jpg,希望能附上简单的代码,谢谢!
展开
2个回答
展开全部
读入内存是你自己写的,当然也可以让一个图片对象自己读进来,读写的底层过程是用createfile打开,然后用readfile来读取数据到你自己指定的内存存储区,然后你可以在把它写到其他地方,需要你在其它地方在创建一个文件仍然是createfile,然后用writefile写入就行。。。。我说的是windows API实现,任何被封装的类都需要靠这种方法。。。。但对于C++可以使用iostream这样的类,但他们也是在使用createfile 这写API函数。。。至于MFC我并不会用,但底层的方法他还是支持的,就这3个函数就行, createfile writefile reatefile,任何语言都支持,这是windows提供的,所以需要将其连接WIN32.dll连接进来,MFC怎么做我并不会,但C和C++只要写#include<windows.h>即可。。。
展开全部
文件的读写 一般指的是 纯文本文件 ini 等等这些文件
你说的jpg 这输入图片的读取
文件读取和jpg读取还是有一点区别的
文件读取你可以用CFILE 和 文件流 来读取
CString strData="";
ostringstream os;
os.str("");
std::string s;
os << “111111111”;
//os << *p; //p为指针类型 比如 char *p = "123456";
std::string stri;
stri = os.str();
strData = stri.c_str();
ostringstream很好用 能写各种类型的数据 比如:int CString string 指针等
图片的读取片的话(jpg bmp png等)
void TransparentImage(CImage &Image)
{
// CImage Image;
// Image.Attach(hBitmap);
int nPitch = Image.GetPitch(), nBPP = Image.GetBPP();
LPBYTE lpBits = reinterpret_cast<LPBYTE>(Image.GetBits());
for (int yPos = 0; yPos < Image.GetHeight(); yPos++)
{
LPBYTE lpBytes = lpBits + (yPos * nPitch);
PDWORD lpLines = reinterpret_cast<PDWORD>(lpBytes);
for (int xPos = 0; xPos < Image.GetWidth(); xPos++)
{
if (nBPP == 32 && lpLines[xPos] >> 24 != 0x000000FF)
{
lpLines[xPos] |= 0xFFFFFFFF;
}
}
}
Image.Save(strOutPhotoPath);
}
int PhotoTOPhoto(char *InPhotopath, char *OutPhotopath)
{
CImage img;
strInPhotoPath = "";
strOutPhotoPath = "";
strInPhotoPath = InPhotopath;
strOutPhotoPath = OutPhotopath;
try
{
img.Load(strInPhotoPath); //加载图片
TransparentImage(img); //处理成透明色,要不然转出来是黑色的
img.Destroy(); //释放IMG资源
}
catch (...)
{
return -1;
}
return 0;
}
在外部直接调用
int PhotoTOPhoto(char *InPhotopath, char *OutPhotopath);
CString strPathC = "C:\\a.jpg";
CString strPathD = "D:\\b.jpg";
PhotoTOPhoto(strPathC,strPathD);
你说的jpg 这输入图片的读取
文件读取和jpg读取还是有一点区别的
文件读取你可以用CFILE 和 文件流 来读取
CString strData="";
ostringstream os;
os.str("");
std::string s;
os << “111111111”;
//os << *p; //p为指针类型 比如 char *p = "123456";
std::string stri;
stri = os.str();
strData = stri.c_str();
ostringstream很好用 能写各种类型的数据 比如:int CString string 指针等
图片的读取片的话(jpg bmp png等)
void TransparentImage(CImage &Image)
{
// CImage Image;
// Image.Attach(hBitmap);
int nPitch = Image.GetPitch(), nBPP = Image.GetBPP();
LPBYTE lpBits = reinterpret_cast<LPBYTE>(Image.GetBits());
for (int yPos = 0; yPos < Image.GetHeight(); yPos++)
{
LPBYTE lpBytes = lpBits + (yPos * nPitch);
PDWORD lpLines = reinterpret_cast<PDWORD>(lpBytes);
for (int xPos = 0; xPos < Image.GetWidth(); xPos++)
{
if (nBPP == 32 && lpLines[xPos] >> 24 != 0x000000FF)
{
lpLines[xPos] |= 0xFFFFFFFF;
}
}
}
Image.Save(strOutPhotoPath);
}
int PhotoTOPhoto(char *InPhotopath, char *OutPhotopath)
{
CImage img;
strInPhotoPath = "";
strOutPhotoPath = "";
strInPhotoPath = InPhotopath;
strOutPhotoPath = OutPhotopath;
try
{
img.Load(strInPhotoPath); //加载图片
TransparentImage(img); //处理成透明色,要不然转出来是黑色的
img.Destroy(); //释放IMG资源
}
catch (...)
{
return -1;
}
return 0;
}
在外部直接调用
int PhotoTOPhoto(char *InPhotopath, char *OutPhotopath);
CString strPathC = "C:\\a.jpg";
CString strPathD = "D:\\b.jpg";
PhotoTOPhoto(strPathC,strPathD);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询