使用 Paradox 在 Delphi 7 中实时将 BMP 转换为 JPG
在这里和 Code News Fast 进行研究,我没有看到任何与我的问题相关的内容。 我有一个应用程序,当用户单击我的应用程序中的按钮进行加载时,会通过剪贴板从第三方拍照程序获取客户图片(JvDBImage)。 (照片图像.PasteFromClipboard)。 这会将图像加载并保存为位图……有时是一个大 BMP。 所以,我需要一些可以保存和加载 JPG 的东西。
我尝试过: .. 使用 JPeg
var
jpg : TJpegImage;
begin
PhotoImage.PasteFromClipboard;
// // convert to JPEG
// jpg.Create;
// jpg.Assign(PhotoImage.Picture);
// PhotoImage.Picture := jpg;
// freeAndNil(jpg);
end;
无法编译,因为分配是两种不同的类型。 我还花了一些时间处理剪贴板,试图将其放入 TMemoryStream 中,但没有成功。
我的下一个尝试是将其临时保存到文件中,然后将其作为 JPG 检索,但这会很慢,而且我不确定我想要做的事情是否可行。 因此,我想我应该在这里发布问题,而不是去另一条巷子。
相关数据库有一个名为 Photo 的 memo(1) 字段,PhotoImage 连接到该字段。
Researching here and at Code News Fast, I've seen nothing on point to my problem. I have an app where a customer picture (a JvDBImage) is acquired through the clipboard from a third-party picture-taking program when the user clicks a button in my app to load it. (PhotoImage.PasteFromClipboard). That loads and saves the image as a bitmap ... sometimes a BIG BMP. So, I need something that will make the saving and loading a JPG.
I tried: .. uses JPeg
var
jpg : TJpegImage;
begin
PhotoImage.PasteFromClipboard;
// // convert to JPEG
// jpg.Create;
// jpg.Assign(PhotoImage.Picture);
// PhotoImage.Picture := jpg;
// freeAndNil(jpg);
end;
Which won't compile, since the assignation is of two different types. I also spent some time working on the clipboard, trying to get it into a TMemoryStream without success.
My next try is to save it temporarily to a file and then retrieve it as a JPG, but that will be slow and I'm not sure what I'm trying to do is possible. So, rather than head down another alley, I thought I'd post the question here.
The database in question has a memo(1) field called Photo, which PhotoImage is connected to.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此页面至少显示了如何将剪贴板内容转换为 JPEG:
这段代码非常不完整,我不确定它是否正确,但是使用的方法应该是正确的,并且纠正起来不应该那么困难(例如,cf_BitMap应该是HBITMAP,并且您不需要“ CopyToClipboardBitmap”行,因为您似乎已经将数据存储在那里)。
您还应该查看 TJPEGImage 类,以将图像质量和其他参数设置为适合您需要的值。
但是,如果您想对大图像实时执行此操作,您最好寻找一些可以使用的 JPG 库。 有些例程的性能可能比 Delphi 例程更好。
This page at least shows how to convert the clipboard content to JPEG:
This code is quite incomplete and I'm not sure if it's correct, but the methods used should be right and it shouldn't be that hard to correct (cf_BitMap should be a HBITMAP, for example, and you won't need the "CopyToClipboardBitmap" line as you seem to already have the data stored there).
You should also have a look at the TJPEGImage class to set image quality and other parameters to values that suit your needs.
If you want to do this in realtime for big images, however, you should better look for some JPG library you can use. There could be some that perform better than the Delphi routines.
以下是我几年前编写的一些用于处理 JPEG 图像的代码的摘录。 它演示了加载和保存 jpeg 文件、从 blob 字段存储和检索 jpeg 数据以及在 jpeg 和 bmp 之间进行转换。
“_proper”过程演示了通过从 JPEG -> 重新压缩图像。 BMP-> JPEG。 “_update_display”过程演示了如何在画布上绘制 TJpegImage 以便用户可以看到它。
Here's an excerpt of some code I wrote a few years ago to handle JPEG images. It demonstrates loading and saving jpeg files, storing and retrieving jpeg data from a blob field, and converting between jpeg and bmp.
The '_proper' procedure demonstrates re-compressing an image by going from JPEG -> BMP -> JPEG. The '_update_display' procedure demonstrates how to draw a TJpegImage on a canvas so the user can see it.