お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"謎全さんのTJPEGField互換コンポ(のつもり)"

この発言に対し以下のコメントが寄せられています
#01418 Satobe さん RE:謎全さんのTJPEGField互換コンポ(のつも

謎の全知師さん作の TJPEGField と互換のコンポのつもりです。 Delphi6 Paradox形式のデータベースで動作を確認しています。 以下のソースを適当なパッケージに入れてコンパイル・インストール して下さい。 なお、謎の全知師さんからソースを譲り受けたわけではありませんので 以下は私のオリジナルソースです。 そのため、謎の全知師さん作の TJPEGField と完全互換でない部分が あるかも知れません。 #必要なら自分で修正してね...(^^; unit JPEGFld; interface uses Classes, DB, DBTables, Graphics, Jpeg; type TJPEGField = class(TGraphicField) protected procedure AssignTo(Dest: TPersistent); override; public procedure Assign(Source: TPersistent); override; end; implementation type //Db.pasでローカルに定義されている TGraphicHeader = record Count: Word; { Fixed at 1 } HType: Word; { Fixed at $0100 } Size: Longint; { Size not including header } end; procedure TJPEGField.AssignTo(Dest: TPersistent); var BlobStream: TBlobStream; Size: Longint; Header: TGraphicHeader; JPEG: TJPEGImage; begin if Dest is TJPEGImage then begin BlobStream := TBlobStream.Create(Self, bmRead); try Size := BlobStream.Size; if Size >= SizeOf(TGraphicHeader) then begin BlobStream.Read(Header, SizeOf(Header)); if (Header.Count = 1) and (Header.HType = $0200) then begin //JPEG画像のようだ //BlobStream.Position := SizeOf(Header); TJPEGImage(Dest).LoadFromStream(BlobStream); Exit; end; end; finally BlobStream.Free; end; end; if Dest is TPicture then begin BlobStream := TBlobStream.Create(Self, bmRead); try Size := BlobStream.Size; if Size >= SizeOf(TGraphicHeader) then begin BlobStream.Read(Header, SizeOf(Header)); if (Header.Count = 1) and (Header.HType = $0200) then begin //JPEG画像のようだ JPEG := TJPEGImage.Create; try //BlobStream.Position := SizeOf(Header); JPEG.LoadFromStream(BlobStream); TPicture(Dest).Assign(JPEG); Exit; finally JPEG.Free; end; end; end; finally BlobStream.Free; end; end; inherited AssignTo(Dest); end; procedure TJPEGField.Assign(Source: TPersistent); var Header: TGraphicHeader; BlobStream: TBlobStream; begin if Source is TJPEGImage then begin BlobStream := TBlobStream.Create(Self, bmWrite); try Header.Count := 1; Header.HType := $0200; Header.Size := 0; BlobStream.Write(Header, SizeOf(Header)); TJPEGImage(Source).SaveToStream(BlobStream); Header.Size := BlobStream.Position - SizeOf(Header); BlobStream.Position := 0; BlobStream.Write(Header, SizeOf(Header)); finally BlobStream.Free; end; Exit; end; inherited Assign(Source); end; procedure SetDefaultFieldClasses; type PInteger = ^Integer; var p: Pointer; begin //D3,D4,D5ならば↓ //DefaultFieldClasses[ftGraphic] := TJPEGField; p := @DefaultFieldClasses[ftGraphic]; PInteger(p)^ := Integer(TJPEGField); end; initialization RegisterClass(TJPEGField); SetDefaultFieldClasses; end. 02/02/22(金) 12:50 Satobe(JCG00336)  Original document by Satobe 氏 ID:(JCG00336)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum