大量の画像の印刷について


yamada  2014-12-13 01:47:43  No: 46920

以下のように画像を印刷するプログラムを作成したのですが、

EOutOfResources (メッセージ 'このコマンドを実行するのに十分な記憶域がありません。
')を送出しました。

というメッセージが表示され印刷できません。

また枚数が少ない場合でも、ところどころ白紙で印刷されます。

どのように作成したら上手く印刷されるか
ご教示宜しくお願い致します。

procedure TFMain.Button1Click(Sender: TObject);
var
  i:integer;
  pRect:TRect;
  Bmp:TBitmap;
begin
  pRect :=Bounds(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX-100),
                 GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY-100),
                 GetDeviceCaps(Printer.Handle, HORZRES),
                 GetDeviceCaps(Printer.Handle, VERTRES));
  Printer.BeginDoc;

  try
    try
      for i:=1 to 99 do begin
        try
          Bmp:='C:\'+inttostr(i)+'.bmp'
          Image1.Picture.Assign(Bmp);
        finally
          Bmp.Free;
        end;
        if i > 0 then begin
          Printer.NewPage;
          Printer.Canvas.CopyMode:= cmWhiteness;
        end;

        Printer.Canvas.CopyMode:=cmSrcAnd;
        Printer.Canvas.StretchDraw(pRect,Image2.Picture.Graphic);

        Image1.Picture.Assign(nil);
      end;
    except
      Printer.Abort;
    end;
  finally
    Printer.EndDoc;
  end;
end;


tor  2014-12-13 02:49:53  No: 46921

えーと、まずツをテしていないのですが、これは写し漏れでしょうか?

ツに文字列を代入しているのはたぶんフニニの写し間違い、
ノイが突然出てくるのもノアの間違いだと仮定して、
あとテヘを二度設定して何がしたいかよくわからないのもとりあえず脇に置いといて……

わざわざノを経由している理由がわからないのですが
ロードしたツを直接モトに渡したらどうなりますか?
あと、ヲサヲサヲサヲサーヲサって条件は結局意味がなくて毎回実行されているはずですけど、
念のためその文を外したらどうなります?
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアエッアイッアオィ月ゥ アエコアクコエカ  書込者ノト:ロ 「ィ「。  ン

すいません。ソースの写し間違いが多いです。

ノを経由している理由は、画像の形式が特殊でして、
一旦あるコンポーネントの関数でビットマップに変換にしているのですが、
直接渡すとなぜかエラーで落ちるから意図的にそうしてました。

ヲサヲサヲサヲサーヲサはカウント用の別の変数を用意してまして、混同していました。
時間を掛けて解析いただいたのに大変申し訳ございません。

やりたいことは、ストリンググリッドに画像のパス情報が入っていて、
そちらを参照しながら、パスが入っている分に関して印刷したいというものでして、
下記はクイックレポートでの印刷をしようとしているのですが、
どうもデータ以外のものを印刷するのは初めてでして、いろいろ調べているのですが、
よくわかりません。もう一度ご教示お願いできませんでしょうか?

画像ア枚単位では印刷できたのですが、
複数枚を貯めこんで同時に印刷したいのです。

ヲサヲサノテササヲサッッストリンググリッドヲサイメージパスのカラム位置
ヲサヲサメテコサッッ行番号
ヲサヲサノコサヲサヲサッッ画像パス名

ヲサヲサッッカラム位置
ヲサヲサノテコスアサ

ヲサヲサチョテニィヤニミャヲサニミゥサ
ヲサヲサ
ヲサヲサヲサヲサヲサメテコスアヲサヲサモヌアョメテュアヲサヲサ
ヲサヲサヲサヲサヲサヲサッッ画像パスを入れる
ヲサヲサヲサヲサヲサヲサノコスモヌアョテロノテャメテンサヲサ
ヲサヲサヲサヲサヲサヲサッッファイルが存在するかどうか確認する
ヲサヲサヲサヲサヲサヲサヲサニナィノゥヲサスヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサッッ存在した場合にムメノ関連付け
ヲサヲサヲサヲサヲサヲサヲサヲサニアョムメノアョミョチィノゥサ
ヲサヲサヲサヲササ
ヲサヲサヲサヲサッッ印刷
ヲサヲサヲサヲサムメアョミサ
ヲサヲサ
ヲサヲサヲサヲサニチホィニミゥサ
ヲサヲササ

宜しくお願い致します。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアエッアイッアオィ月ゥ アオコエオコーケ  書込者ノト:ロ 」 ァ」ハノ

 ン

ヲサヲサ一旦あるコンポーネントの関数でビットマップに変換にしているのですが、
ヲサヲサ直接渡すとなぜかエラーで落ちるから意図的にそうしてました。
うーん、だったらそのエラーを解決する方法を探すのが筋なんじゃないの?ヲサと思いますが。
ちなみに、印刷しようとしている画像はどのくらいの大きさですか?
(ヤツで巨大なビットマップが扱えないとか、プリンタによっては正常に印刷できないといった問題は
ここでもしばしば挙がっていたと思います。「ヤツツ」で検索すれば情報が出てくるかと)

突然ムメが出てきましたけど、ムメだと印刷の作法がまったく異なるので
回答も全然違うものになりますよ。どちらでの解決をお望みなのでしょうかソ
ィゥヲサ最初のコードのエラーを解決して、標準的なミのコードを使って印刷したい
ィゥヲサ最初のはナシ、実はムメを使って印刷したい

前者の場合、とりあえずモトをただのトに変えたらエラーがなくなるか見てみてください。
(あと、テヘの設定に意味があるとは思えないので外して)
それで解消するようだったら、前述したヤツツに置き換えれば解決するかもしれません。

後者だとすると、私はムメ使ったことないのでお助けできませんね。
ざっと見た感じ、マホトイベントでアページごとに内容を差し替えるとかするみたいですけど。
スススススススススススススススススススススススススススススススススススススススス
ニコ 雪だるま
トコ イーアエッアイッアキィ水ゥ アエコアエコエカ  書込者ノト:ロ 」「 、。  ン

ムメを使って、画像の連続印刷をすると画像抜けが起きるのは、自分も経験をしました。
その時に、こちらを参考にして、解決をしました。
コッッュョョッッアカアオウオキケオョ
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッーアッイキィ火ゥ アカコオウコエア  書込者ノト:ロ 「ィ「。  ン
モコ 

遅くなり申し訳ございません。

皆様ご回答ありがとうございました。

解決しましたのでご報告させて頂きます。

画像のパスをテーブルに落として、
クイックレポートのツミのイベントで
ムメノに読み込ましていくという手法を取りまして、
すんなり印刷してくれるようになりました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加