请问为什么图像质量会降低呢?

snowedforest 2002-04-23 01:48:27
请注意:生成的类没释放。)
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,jpeg, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
private
tempImage:TPicture;
temp:TJpegImage;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
tempImage:=TPicture.Create();
temp:=TJpegImage.Create();
temp.CompressionQuality:=100;
temp.Smoothing:=true;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
temp.LoadFromFile('d:\connect.jpg');
tempImage.Bitmap.Assign(temp);
BitBlt(PaintBox1.canvas.handle,1,1,300,400,tempImage.Bitmap.Canvas.Handle,1,1,MERGECOPY );

end;

end.


...全文
49 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowedforest 2002-04-25
  • 打赏
  • 举报
回复
这是VC里得到的答复,有哪位能将它变成Object Pascal.Thank you.
=========================================
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);
}

everydayniceday 2002-04-24
  • 打赏
  • 举报
回复
这个问题我也遇到过,不过没有解决办法。
爱莫能助!
和格式好像是没有关系的。
firetoucher 2002-04-24
  • 打赏
  • 举报
回复

snowedforest 2002-04-24
  • 打赏
  • 举报
回复
谢谢所有的人。
我很伤心。
Clivezc 2002-04-24
  • 打赏
  • 举报
回复
Delphi和ACDSee支持的颜色不同,
可以考虑用别的控件打开。
snowedforest 2002-04-24
  • 打赏
  • 举报
回复
为什么用ACDSEE看就没损失呢?用Delphi编程打开Jpeg打开怎么样才能避免损失呢?
我还是相信Delphi和各位高手能帮我。
多谢。
ggdw 2002-04-24
  • 打赏
  • 举报
回复
用JPGE有损失的·~
================================================================
delphi菜鸟联盟 http://bbs.at.8800.org 欢迎你的到来!!!
我们是菜鸟,我们怕谁??
大菜鸟(沉默的高羊)的QQ:16730133 Email:ggdw@cn99.com
╭══╮ 
╭╯ΘΘ║ 
╰⊙═⊙╯。oо○ 
    
delphi菜鸟联盟灌水专用!!!

sword1028 2002-04-24
  • 打赏
  • 举报
回复
jpeg是图形有损压缩的,你即使压缩率为100只要有别的类型图片转过来的基本都进行了转换,在转化的过程中使图片的像素降低了。
sword1028 2002-04-24
  • 打赏
  • 举报
回复
jpeg是图形有损压缩的,你即使压缩率为100只要有别的类型图片转过来的基本都进行了转换,在转化的过程中使图片的像素降低了。
blazingfire 2002-04-24
  • 打赏
  • 举报
回复
不是不理你呀,不懂!!
snowedforest 2002-04-24
  • 打赏
  • 举报
回复
??
snowedforest 2002-04-23
  • 打赏
  • 举报
回复
还是没人理我。
snowedforest 2002-04-23
  • 打赏
  • 举报
回复
看来真是难题,请各位伸出援手。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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