unit Unit1;

interface

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls,     
  Forms, Dialogs,jpeg, ExtCtrls, StdCtrls,ActiveX, AxCtrls; 
type 
  TForm1 = class(TForm) 
    Image1: TImage; 
    Button2: TButton; 
    Image2: TImage; 
    procedure Button2Click(Sender: TObject); 
  private 
    procedure StreamToVariant(Stream: TMemoryStream; 
                              var v:  OleVariant); 
    procedure VariantToStream(const v: olevariant; 
                              Stream: TMemoryStream); 
    procedure JPEGToVariant(aJPEG : TJPEGImage; 
                             var aVariant:OleVariant); 
    procedure VariantToJPEG(aValue : OleVariant; 
                             var aJPEG:TJPEGImage); 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end;

var 
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.VariantToStream (const v : olevariant; Stream : TMemoryStream); 
var 
  p : pointer; 
begin 
  Stream.Position := 0; 
  Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1; 
  p := VarArrayLock (v); 
  Stream.Write (p^, Stream.Size); 
  VarArrayUnlock (v); 
  Stream.Position := 0; 
end;

procedure TForm1.StreamToVariant (Stream : TMemoryStream; var v : OleVariant); 
var 
  p : pointer; 
begin 
  v := VarArrayCreate ([0, Stream.Size - 1], varByte); 
  p := VarArrayLock (v); 
  Stream.Position := 0; 
  Stream.Read (p^, Stream.Size); 
  VarArrayUnlock (v); 
end;

procedure TForm1.JPEGToVariant(aJPEG : TJPEGImage; var aVariant:OleVariant); 
var 
  Stream        : TMemoryStream; 
begin 
    try 
      Stream := TMemoryStream.Create;

aJPEG.Assign(Image1.Picture.Bitmap); 
      aJPEG.SaveToStream(Stream);

StreamToVariant(Stream, aVariant); 
    finally 
       Stream.Free; 
   end; 
end;

procedure TForm1.VariantToJPEG(aValue : OleVariant;var aJPEG:TJPEGImage); 
var 
   Stream : TMemoryStream; 
begin 
try 
  Stream := TMemoryStream.Create;

VariantToStream (aValue,Stream); 
  aJPEG.LoadfromStream(Stream);

finally 
   VariantClear(aValue); 
   Stream.free; 
end; 
end;

procedure TForm1.Button2Click(Sender: TObject); 
var 
   aJPEG :TJPEGImage; 
   aVariant : OleVariant; 
begin 
try 
   aJPEG:=TJPEGImage.Create;

//JPEG To Variant 
   aJPEG.Assign(Image1.Picture.Bitmap); 
   JPEGToVariant(aJPEG,aVariant);

//Variant To JPEG 
   VariantToJPEG(aVariant,aJPEG); 
   Image2.Picture.assign(aJPEG); 
finally 
   aJPEG.free; 
end; 
end;

end.

JPEG和Variant的转换的更多相关文章

  1. opencv IplImage各参数详细介绍以及如何从一个JPEG图像数据指针转换得到IplImage

    这篇文章里介绍得最清楚了.http://blog.chinaunix.net/uid-22682903-id-1771421.html 关于颜色空间  RGB颜色空间已经非常熟悉了.HSV颜色空间需要 ...

  2. CString VariantToString(VARIANT var);转换

    Variant类型转换成CString代码 对数据库的操作常常会用Variant和_bstr_t类型,在进行MFC等程序中,通常会用到CString类.从variant转换成CString代码如下:v ...

  3. 文件和Variant的转换

    function FileToVariant(FileName: String): OleVariant; var   AStream: TFileStream;   MyBuffer: Pointe ...

  4. 流和Variant的转换

    procedure TForm2.VariantToStream (const v : olevariant;                                   Stream : T ...

  5. bmp和Variant的转换

    procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap); var    Stream : TMemoryStream;  ...

  6. 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式

    渐进式jpeg(progressive jpeg)图片及其相关   一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...

  7. 使用textutil进行文件格式转换

    Typorahtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { ...

  8. 【转】C#使用ESC指令控制POS打印机打印小票

    .前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...

  9. Word,PDF,PPT,TXT之间的转换方法

    来源: 刘波的日志 一.把PPT转WORD形式的方法 1.利用"大纲"视图 打开PPT演示文稿,单击"大纲",在左侧"幻灯片/大纲”任务窗格的“大纲” ...

随机推荐

  1. js搞定网页的简繁转换

    对网页进行简繁字体转换的方法一般有两种:一是使用<简繁通>这样的专业软件,另外一种是制作两套版本的网页.显然,这两种方法都较为麻烦,而且专业软件一般不能用于免费的空间.笔者在这里给大家提供 ...

  2. Open Flash Chart 之线图

    天公司要求开发一个曲线图,简单看了一下之前公司的一个系统,发现一个曲线图效果还不错,查了一下叫OpenFlashChart,还是很不错的,很多人用.研究了一下,发现还不错,特地写了个DEMO测试下. ...

  3. jQuery插件之ajaxFileUpload[转载]

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...

  4. RK3288 wifi模块打开或关闭5G信号

    CPU:RK3288 系统:Android 5.1 如果硬件使用的wifi模块支持5G,则系统设置中打开wifi,除了会搜索到普通的2.4G信号,还会搜索到xxx_5G信号. 如果路由器开了5G信号, ...

  5. CC2530中串口波特率改为9600时单个数据包来不及接收的解决方案

    在调试CC2530过程中发现波特率改为9600时,单个包仅有3个Byte时,接收DMA就会启动 因而数据包被强迫拆分成多个,显然只要将接收DMA启动延时做到足够大即可. 具体修改内容如下图所示: 经过 ...

  6. python初始环境安装

    Python下载地址 Python官网:https://www.python.org/ 在该网可以下载Python最新及历史版本.可以下载基于Windows或其它操作系统的版本. Python安装 本 ...

  7. maven教程基础

    一.Maven介绍 我们在开发项目的过程中,会使用一些开源框架.第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要添加到项目中,所有这些相关的 ...

  8. MySQL主从同步和半同步配置

    mysql主从配置: 1,安装maraidb,使用国内yum镜像站下载:[root@localhost mysql]# cat /etc/yum.repos.d/MairaDB.repo # Mari ...

  9. 学习笔记之Kubernetes

    Kubernetes | Production-Grade Container Orchestration https://kubernetes.io/ Kubernetes is an open-s ...

  10. MySQL-Jira双机热备

    主服务器:192.168.1.23 从服务器:192.168.1.243 一.主服务器Master配置 1. 创建同步账号.赋权 在主服务器上为从服务器建立一个连接帐户,此处用root,该帐户必须授予 ...