118 lines
2.9 KiB
ObjectPascal
118 lines
2.9 KiB
ObjectPascal
(* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is TurboPower Abbrevia
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* TurboPower Software
|
|
*
|
|
* Portions created by the Initial Developer are Copyright (C) 1997-2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* ***** END LICENSE BLOCK ***** *)
|
|
|
|
{*********************************************************}
|
|
{* ABBREVIA: QSTRMBMPU.DPR *}
|
|
{*********************************************************}
|
|
{* ABBREVIA Example program file *}
|
|
{*********************************************************}
|
|
|
|
unit QStrmBmpU;
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF WIN32}
|
|
Windows,
|
|
{$ELSE}
|
|
{$ENDIF}
|
|
SysUtils, Classes, QGraphics, QForms, QControls, QStdCtrls, QExtCtrls;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
Image1: TImage;
|
|
Button1: TButton;
|
|
Memo1: TMemo;
|
|
procedure Button1Click(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses
|
|
AbUnzPrc,
|
|
AbZipPrc;
|
|
|
|
{$R *.xfm}
|
|
|
|
procedure TForm1.Button1Click(Sender: TObject);
|
|
var
|
|
UStrm : TMemoryStream;
|
|
CStrm : TMemoryStream;
|
|
Image2 : TImage;
|
|
begin
|
|
{ Create the compressed stream and the uncompressed stream. }
|
|
UStrm := TMemoryStream.Create;
|
|
CStrm := TMemoryStream.Create;
|
|
|
|
{ Copy the bitmap image to the memory stream. }
|
|
Image1.Picture.Bitmap.SaveToStream(UStrm);
|
|
|
|
{ Set the stream position to the beginning. }
|
|
UStrm.Position := 0;
|
|
|
|
{ Compress the stream. }
|
|
DeflateStream(UStrm, CStrm);
|
|
|
|
{ Remove all data from the uncompressed stream. }
|
|
UStrm.Clear;
|
|
|
|
{ Reset the compressed stream back to the beginning. }
|
|
CStrm.Position := 0;
|
|
|
|
{ Decompress the stream back to the original uncompressed }
|
|
{ stream and then reset the stream position back to 0. }
|
|
InflateStream(CStrm, UStrm);
|
|
UStrm.Position := 0;
|
|
|
|
{ Now create a new TImage. Make it the same size as the }
|
|
{ original image but move it down and to the left. }
|
|
Image2 := TImage.Create(Self);
|
|
Image2.Top := Image1.Top + 20;
|
|
Image2.Left := Image1.Left + 20;
|
|
Image2.Width := Image1.Width;
|
|
Image2.Height := Image1.Height;
|
|
Image2.Parent := Self;
|
|
|
|
{ Delete the original TImage. }
|
|
Image1.Free;
|
|
|
|
{ Load the new bitmap with the data from the stream }
|
|
{ that contains the decompressed image. }
|
|
Image2.Picture.Bitmap.LoadFromStream(UStrm);
|
|
|
|
{ Free the memory streams. }
|
|
UStrm.Free;
|
|
CStrm.Free;
|
|
end;
|
|
|
|
end.
|