jpeg是图形有损压缩的,你即使压缩率为100只要有别的类型图片转过来的基本都进行了转换,在转化的过程中使图片的像素降低了。
解决方案 »
- 如何制作在delphi中的showmessage?
- turbo delphi内部测试版泄漏~
- 急!求教一个关于TListView WorkArea的问题,VCL控件高手请进。
- <<笑话>>
- stringgrid控件中,请问如何获得鼠标当前所在的行号和列号?
- 啧啧怪事!
- 各位高手知道Web Sever Application中的ISAPI的请进来看看;分不够再加
- 动态连接库的问题???(请大家帮忙)
- 怎么每隔2分钟循环执行下面5个不同语句【高手请进】谢谢
- 关于消息反应...
- 欢迎灌水,请斑竹不要移走我的贴子,谢谢(处于失意中)
- 能不能作一个象delphi编译器qreport那样用户自己编辑报表格式?
我还是相信Delphi和各位高手能帮我。
多谢。
可以考虑用别的控件打开。
=========================================
void JpegToForm(LPCTSTR szFile, HDC hdc)
{
// open file
HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
_ASSERTE(INVALID_HANDLE_VALUE != hFile); // get file size
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize); LPVOID pvData = NULL;
// alloc memory based on file size
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal); pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData); DWORD dwBytesRead = 0;
// read file and store in global memory
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile); LPSTREAM pstm = NULL;
// create IStream* from global memory
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm); // Create IPicture from image file
LPPICTURE gpPicture; hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release(); OLE_HANDLE m_picHandle;
/*
long hmWidth, hmHeight;
gpPicture->get_Width(&hmWidth);
gpPicture->get_Height(&hmHeight);
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
*/
gpPicture->get_Handle(&m_picHandle);
// 下面是我修改的代码
// 取得图片大小
POINT size;
BITMAP bm;
GetObject((HGDIOBJ) m_picHandle, sizeof(bm), &bm);
size.x = bm.bmWidth; //nWidth;
size.y = bm.bmHeight; //nHeight; // 贴图
HDC hMemDC = CreateCompatibleDC(hdc);
HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC, (HGDIOBJ)m_picHandle);
BitBlt(hdc, 0, 0, size.x, size.y, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOldBmp);
}