[Delphi:89409] TGraphicからの部分コピー

787 views
Skip to first unread message

久世雄一

unread,
Mar 15, 2007, 11:18:04 AM3/15/07
to Del...@ml.users.gr.jp

いつもお世話になっております。

久世です。

画像関係は、特に疎いため教えてください。
GraphicEX というライブラリを使用しています。

usesに、GraphicEXを追加し、

var
Graphic: TGraphic;

省略
Graphic.LoadFrom(ファイル名);
Image1.Picture.Graphic := Graphic;

とすると、画像全体が表示できるのですが、
画像の一部分のみを切り取って貼り付けたいと思っています。

そこで、Canvas.CopyRect を使用しようと思ったのですが、
Canvas.CopyRect(TRect, TCavas, TRect);
という型なので、TGraphicの内容を一旦テンポラリーのTCamvasに
ロードする必要があり、非効率です。

TGraphic型の一部を取り出し、TGraphic型を生成するなど、良い方法を
ご伝授ください。

以上よろしくお願いします。

〔● 久世雄一 ●〕
〔● E-Mail: ku...@hi-ho.ne.jp ●〕


khe00221

unread,
Mar 15, 2007, 1:09:53 PM3/15/07
to Del...@ml.users.gr.jp
KHE00221 です

TGraphic 型ではなく TPicture型です

TGraphic型では おそらくロードした時点で Abstractエラーが出るかと思いますが?

procedure TForm1.Button1Click(Sender: TObject);
var
Picture : TPicture;
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Picture := TPicture.Create;
if OpenDialog1.Execute = True then
begin
Picture.LoadFromFile(OpenDialog1.FileName);
Bitmap.Assign(Picture.Graphic);
Image1.Canvas.CopyRect(Rect(0,0,80,80),Bitmap.Canvas,Rect(20,20,100,100));
end;
Picture.Free;
Bitmap.Free;
end;

> という型なので、TGraphicの内容を一旦テンポラリーのTCamvasに
> ロードする必要があり、非効率です。

上記のプログラムでは Bitmap にコピーしていますが、これは回避する事が出来ないと思います。

-----------------------------
http://khe00221.image.coocan.jp/
-----------------------------

----- Original Message -----
From: "久世雄一" <ku...@hi-ho.ne.jp>
To: <Del...@ml.users.gr.jp>
Sent: Friday, March 16, 2007 12:18 AM
Subject: [Delphi:89409] TGraphicからの部分コピー


>
> いつもお世話になっております。
>
> 久世です。
>
> 画像関係は、特に疎いため教えてください。
> GraphicEX というライブラリを使用しています。
>
> usesに、GraphicEXを追加し、
>
> var
> Graphic: TGraphic;
>
> 省略
> Graphic.LoadFrom(ファイル名);
> Image1.Picture.Graphic := Graphic;
>
> とすると、画像全体が表示できるのですが、
> 画像の一部分のみを切り取って貼り付けたいと思っています。
>
> そこで、Canvas.CopyRect を使用しようと思ったのですが、
> Canvas.CopyRect(TRect, TCavas, TRect);

>

tonbo_ik

unread,
Mar 16, 2007, 5:06:33 AM3/16/07
to Del...@ml.users.gr.jp
あくつです。
お世話になっています。

Delphi7 + InterBase6 + InterBase Expressを使用しています。

DBLookupComboBox のテキストエリアに、文字が入らず悩んでいます。

・マウスクリックしても文字は入りません。

・DBLookupComboBox1.Text := 'test'; とすると、
『[エラー] : 読み込み専用プロパティに書き込むことはできません』
が出ます。

HELPには、次のように書かれています。
『Text プロパティ (TDBLookupComboBox)

Text プロパティを調べると,選択されている参照値を特定できます。
Text は参照コンボボックスの編集領域で表示される値です。
ReadOnly が false で,データセットが編集モードにあれば,
ユーザーは新しい値を入力して Text の値を変更できます。』

「データセットを編集モードに」する意味がわかりません。

なお、データモジュールには、
・TIBDataset
・TIBDatabase
・TDataSource
他を貼り付けています。

よろしくお願いします。

SAIMI Kohei

unread,
Mar 16, 2007, 6:01:00 AM3/16/07
to Del...@ml.users.gr.jp
saimiです。

DBLookupComboBoxのTextプロパティは読込専用ですので、左辺値(式の左側のこ
と)には出来ませんよ。

DBLookupComboBoxは、例えば、受注データに商品番号を入力するとき、商品番号
を直接入力させる代わりに、商品マスターの商品名をリストアップして選択させ
る、なんて用途に使うものです。

テキストエリアに自由な文字列を入力したいのならば、DBComboBoxをお使いになっ
てください。

--
SAIMI Kohei <qs2...@aim.com>


久世雄一

unread,
Mar 16, 2007, 12:21:00 PM3/16/07
to Del...@ml.users.gr.jp

KHE00221さん

久世です。

アドバイスありがとうございます。

GraphicExについて説明が不足していました。
すみません。

http://www.lischke-online.de/GraphicEx.php

以下のように使用することができます。

var
GraphicClass: TGraphicExGraphicClass;
Graphic: TGraphic;

begin
// GraphicFromContent always returns TGraphicExGraphicClass
Graphic := GraphicClass.Create;
Graphic.OnProgress := ImageLoadProgress;
Graphic.LoadFromFile(FileName);
Image1.Picture.Graphic := Graphic;
end;

On Fri, 16 Mar 2007 02:09:53 +0900
khe00221 <khe0...@vesta.dti.ne.jp> wrote:

> TGraphic 型ではなく TPicture型です

GraphicExの場合、TGraphic型を継承した、TGraphicExGraphicClass型を
使用しているみたいです。

ですので、Graphic.LoadFromFile(FileName)とした場合、
実体は、GraphicClass.LoadFromFile(FileName)が呼ばれていますので
Abstractエラーは発生しません。

> Picture.LoadFromFile(OpenDialog1.FileName);
> Bitmap.Assign(Picture.Graphic);
> Image1.Canvas.CopyRect(Rect(0,0,80,80),Bitmap.Canvas,Rect(20,20,100,100));

カット

> 上記のプログラムでは Bitmap にコピーしていますが、これは回避する事が出来ないと思います。

ということは、本サンプルを参考にすると、

Graphic := GraphicClass.Create;
Graphic.LoadFromFile(FileName);
Bitmap.Assign(Graphic); ・・・・①
Image1.Canvas.CopyRect(Rect(0,0,80,80),Bitmap.Canvas,Rect(20,20,100,100));

とこんな感じでしょうか。

①の部分でエラーが出そうな気がするので、他の方法も含め一旦Bitmapに
変換する方法がないか模索してみます。

では。

〔● 久世雄一 ●〕
〔● E-Mail: ku...@hi-ho.ne.jp ●〕


akutsu

unread,
Mar 16, 2007, 7:55:11 PM3/16/07
to Del...@ml.users.gr.jp
saimi様

読込専用でしたか。
HELPの
「Text は...ReadOnly が false で,データセットが
編集モードにあれば,ユーザーは新しい値を入力して
Text の値を変更できます。』
とあり、変更できると思ってしまいました。

参考書も入手できず手探りで進めています。
ご返事ありがとうございました。

kuro

unread,
Mar 16, 2007, 9:25:29 PM3/16/07
to Del...@ml.users.gr.jp
黒柳です。

On Fri, 16 Mar 2007 18:06:33 +0900
"tonbo_ik" <tonb...@ybb.ne.jp> wrote:

> 「データセットを編集モードに」する意味がわかりません。

変更前に、データセットのEditメソッドを呼び出します。
ただし、常に成功するわけではありません(CanModify プロパティ)。

-------------------
黒柳 裕明
j...@edit.ne.jp


akutsu

unread,
Mar 18, 2007, 3:15:14 AM3/18/07
to Del...@ml.users.gr.jp
黒柳様
あくつです。アドバイスありがとうございました。

次のような文をFormcreateに置き、IBDataSet1や
DataSource1のいくつかプロパティを変えてみたのですが
CanModify プロパティがFalseのままで、Editメソッドが
実行できませんでした。

if IBDataSet1.CanModify = True then
begin
IBDataSet1.Edit;
end;

闇雲ではだめですね・・・

Reply all
Reply to author
Forward
0 new messages