如何从richedit中导出jpg、gif等图片保存

tzjahg 2012-04-06 08:33:46
从richedit中导出bmp图片保存,已完成。
可是如何从richedit中导出jpg、gif等图片保存?
另外,在接收端从richedit中导出bmp图片保存后,显示的图片发生了水平循环移位,很蹊跷,何故?
...全文
246 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zenhobby 2013-04-11
  • 打赏
  • 举报
回复
引用 7 楼 luanj1991 的回复:
LZ好,我现在对这个rtf文件中图片信息的保存为bmp都有点问题,你说你实现了,能不能帮我一下啊,我看你贴出来的代码中 BOOL SaveBmpDataToFile(HBITMAP hBitmap, CString FileName)这个函数应该是的吧,求具体的方法啊,你这只是头文件啊!拜托了,谢谢!
我也想知道这个函数的实现,呼唤楼主啊……
Ninesun1016 2013-04-09
  • 打赏
  • 举报
回复
LZ好,我现在对这个rtf文件中图片信息的保存为bmp都有点问题,你说你实现了,能不能帮我一下啊,我看你贴出来的代码中 BOOL SaveBmpDataToFile(HBITMAP hBitmap, CString FileName)这个函数应该是的吧,求具体的方法啊,你这只是头文件啊!拜托了,谢谢!
向立天 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
在QQ中可以直接另存图片为原格式,不知是如何实现的?目前bmp可以,jpg、gif可以插入richedit,但无法导出另存。看看有不有好办法?
[/Quote]你的gif和jpg插入richedit后是不是就破坏了原文件结构
所以就无法导出了
tzjahg 2012-05-12
  • 打赏
  • 举报
回复
经查: STGMEDIUM stg;
FORMATETC fm;
fm.cfFormat =CF_BITMAP;
fm.ptd = NULL; // Target Device = Screen
fm.dwAspect = DVASPECT_TRANSPARENT; // Level of detail = Full content
fm.lindex = -1; // Index = Not applicaple
fm.tymed = TYMED_GDI ;
stg.tymed = TYMED_GDI; // Storage medium = HBITMAP handle
HRESULT hr = pDataObject->GetData( &fm, &stg );
图片为jpg、gif时hr返回值总是不对,无法进行保存。
请指教。
tzjahg 2012-05-12
  • 打赏
  • 举报
回复
在QQ中可以直接另存图片为原格式,不知是如何实现的?目前bmp可以,jpg、gif可以插入richedit,但无法导出另存。看看有不有好办法?
tzjahg 2012-05-12
  • 打赏
  • 举报
回复
#if !defined(AFX_OLERICHEDITCTRL_H__3DFF15EE_7336_4297_9620_7F00B611DAA1__INCLUDED_)
#define AFX_OLERICHEDITCTRL_H__3DFF15EE_7336_4297_9620_7F00B611DAA1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// OleRichEditCtrl.h : header file
//
#include <afxodlgs.h>
#include <afxpriv.h>
#include "oleimpl2.h"
//#include "Richole.h"

//#include <richole.h>

#include "Richole.h"


#include <afxole.h>



/////////////////////////////////////////////////////////////////////////////
// COleRichEditCtrl window

class COleRichEditCtrl : public CRichEditCtrl
{
// Construction
public:
COleRichEditCtrl();
virtual ~COleRichEditCtrl();

long StreamInFromResource(int iRes, LPCTSTR sType);



protected:
static DWORD CALLBACK readFunction(DWORD dwCookie,
LPBYTE lpBuf, // the buffer to fill
LONG nCount, // number of bytes to read
LONG* nRead); // number of bytes actually read

interface IExRichEditOleCallback; // forward declaration (see below in this header file)

IExRichEditOleCallback* m_pIRichEditOleCallback;
BOOL m_bCallbackSet;


interface IExRichEditOleCallback : public IRichEditOleCallback
{
public:
IExRichEditOleCallback();
virtual ~IExRichEditOleCallback();
int m_iNumStorages;
IStorage* pStorage;
DWORD m_dwRef;

virtual HRESULT STDMETHODCALLTYPE GetNewStorage(LPSTORAGE* lplpstg);
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
virtual HRESULT STDMETHODCALLTYPE GetInPlaceContext(LPOLEINPLACEFRAME FAR *lplpFrame,
LPOLEINPLACEUIWINDOW FAR *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);
virtual HRESULT STDMETHODCALLTYPE ShowContainerUI(BOOL fShow);
virtual HRESULT STDMETHODCALLTYPE QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp);
virtual HRESULT STDMETHODCALLTYPE DeleteObject(LPOLEOBJECT lpoleobj);
virtual HRESULT STDMETHODCALLTYPE QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT FAR *lpcfFormat,
DWORD reco, BOOL fReally, HGLOBAL hMetaPict);
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
virtual HRESULT STDMETHODCALLTYPE GetClipboardData(CHARRANGE FAR *lpchrg, DWORD reco, LPDATAOBJECT FAR *lplpdataobj);
virtual HRESULT STDMETHODCALLTYPE GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect);
virtual HRESULT STDMETHODCALLTYPE GetContextMenu(WORD seltyp, LPOLEOBJECT lpoleobj, CHARRANGE FAR *lpchrg,
HMENU FAR *lphmenu);
};


public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(COleRichEditCtrl)
protected:
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL

// Implementation
public:

void InsertBitmap(HBITMAP hBitmap);
void InsertBitmap(CString strFileName);


BOOL SaveBmpDataToFile(HBITMAP hBitmap, CString FileName); //FileName°üÀ¨Â·¾¶ºÍÎļþµÄÈ«Ãû




static DWORD CALLBACK CStringFormatToRTF(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
static DWORD CALLBACK RTFFormatToCString(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
void SetRTF(CString strRTF);

void SetRTFa(CString strRTF);

CString GetRTF();


afx_msg void GetOptions();



// Generated message map functions
protected:
LPSTORAGE m_lpStorage; // provides storage for m_lpObject
LPLOCKBYTES m_lpLockBytes; // part of implementation of m_lpStorage
LPOLEOBJECT m_lpObject; // in case you want direct access to the OLE object
LPVIEWOBJECT2 m_lpViewObject;// IViewObject for IOleObject above

//{{AFX_MSG(COleRichEditCtrl)
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
// afx_msg void OnCopy() { Copy(); }
afx_msg void OnCopy();

afx_msg void OnCut() { Cut(); }


afx_msg void OnPaste() { Paste(); }
afx_msg void OnSelectall() { SetSel(0, -1); }
afx_msg void OnUndo() { Undo(); }
afx_msg void OnClear() { Clear(); }
afx_msg void OnSelectfont();
afx_msg void OnFromfile();
afx_msg void OnSavefile();



//afx_msg void GetOptions();


afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_OLERICHEDITCTRL_H__3DFF15EE_7336_4297_9620_7F00B611DAA1__INCLUDED_)
tzjahg 2012-04-06
  • 打赏
  • 举报
回复
看来此事对大家是个陌生领域。
chenjiawei007 2012-04-06
  • 打赏
  • 举报
回复
楼主是解析rtf格式 进行导出bmp文件的吗?

图片在richedit里面显示出来的时候已经就是位图了吧,如果你把位图取出来,再用图像处理库,转换成Jpg或者png 也可以的呀。 用CxImage这点可以实现。

自己现在的richedit 无法把图片直接拖进去,拖进去就不能直接显示图像,请教下楼主可以吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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