画像を合成するには?

解決


東海岸  2005-11-09 22:31:06  No: 18569  IP: 192.*.*.*

512*384サイズのJpegファイルを4個読み、1024*768サイズに
合成(2×2)してファイル保存するプログラムを作成しています。
"LoadFromFile"でJpegファイルを読み込んだ後、どうやって合
成したらいいでしょうか?

編集 削除
Mr.XRAY  URL  2005-11-10 00:05:17  No: 18570  IP: 192.*.*.*

合成するということは,つまり2×2で表示するということですよね.
表示する方法がわかならなということでしょうか.
Jpeg画像一つなら表示はできているのでしょうか.
それはどのようにしているのでしょうか.

編集 削除
junki  2005-11-10 00:06:41  No: 18571  IP: 192.*.*.*

1024*768サイズのTBitmapを用意して、その Canvas.Draw() で4カ所に
それぞれ描画して一つの画像にします。

編集 削除
東海岸  2005-11-10 17:54:24  No: 18572  IP: 192.*.*.*

早速の”レス”をありがとうございます。
Mr.XRAYさんへ。
下記のように"TImage"の配列を使い"ボタン3"をクリックすると一つずつ画像を
表示します。(下記ステップ)
"TOpenPictureDialog"が画像のプレビュー付きで便利そうだったので使ってみましたが”jpeg”が使えないんです。あとで変換すれば、と思っていましたが行き詰まり、はじめから"Jpeg"でできないかな?と。

junkiさんへ
"TBitMap"の名前から"Jpeg"は使えないと思ってました。
Helpファイルを調べたら使えそうなのが見つかりました。今、試行錯誤
しているところです。

取っ掛かりができたので、なんとかできそうです。ありがとうございました。

-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
type
  TForm1 = class(TForm)
    Button3: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    procedure Button3Click(Sender: TObject);
    procedure FormOpen(Sender: TObject);
- - - - - - - - - - - - - - 
var
  Form1: TForm1;
  Images: Array[0..3] of TImage ; //TImageの配列
  ImagesCount: Integer;
  CurrentFile: string;
implementation

{$R *.dfm}
//フォームオープン(初期値設定)
procedure TForm1.FormOpen(Sender: TObject);
begin
  ImagesCount := 0
end;
//ボタン3をクリック
procedure TForm1.Button3Click(Sender: TObject);
var
w_Top : integer;
w_Left: integer;
begin
 if OpenPictureDialog1.Execute then  //jpegが選択できない
    begin
      if ImagesCount > 2 then 
        begin
           ImagesCount := 0
      end;
      Images[ImagesCount]           := TImage.Create(Self);
      Images[ImagesCount].Parent := Form1;
      Images[ImagesCount].Width   := 100;   //Sizeはテスト用
      Images[ImagesCount].Height  := 100;
      w_Top  := 10;
      w_Left := ImagesCount;
      if ImagesCount > 1 then
        begin
          w_Top  := 120;
          w_Left := w_Left - 2;
      end;
      Images[ImagesCount].Top    := w_Top;
      Images[ImagesCount].Left   := w_Left * 100 +
                                    (w_Left + 1) * 10;
      CurrentFile := OpenPictureDialog1.FileName;
      Images[ImagesCount].Picture.LoadFromFile(CurrentFile);
      ImagesCount := ImagesCount + 1;
    end;
end;

end.

編集 削除
りおりお  2005-11-10 18:43:42  No: 18573  IP: 192.*.*.*

uses
  Jpeg;

にすると、TJpegImage のインスタンスはVCLのTGraphic互換になりますので
Bitmap.Canvas.Draw() で直接ビットマップ上に描くことができますよ。

編集 削除
Mr.XRAY  URL  2005-11-10 21:22:59  No: 18574  IP: 192.*.*.*

ちょっと意地が悪かったかもしれませんが,実はJpegの扱いの問題なの
ではないかと思ったので確認したかったのです.

答えは,りおりおさんのレスにありますね.

編集 削除
東海岸  2005-11-10 22:21:37  No: 18575  IP: 192.*.*.*

uses
  Jpeg;

こうゆう、おまじないみたいな便利な書き方ってHelpでは見つけられないものです。これで弾みがつきそうです。重ね々ありがとうございました。

編集 削除