Einzelnen Beitrag anzeigen

Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#1

Zeichnen und beim Anschauen Fehler

  Alt 18. Dez 2006, 14:31
Hallo Leute!

Mir ist kein richtiger Titel für mein Problem eingefallen.

Ich habe eine Listbox, in der Dateinamen stehen. Aus diesen Dateinamen sucht sich mein Programm zufällige Einträge und "kachelt" sie auf mein Bild. Soweit so gut, das klappt bis dahin auch, jedoch:

Ich habe einmal ein Image, um mir das Bild verkleinert anzuschauen und eine zweite Form, auf der Das Bild in Originalgröße dargestellt wird, wenn ich also mein Bild erstelle, dann werden die kacheln auf das verkleinerte Bild gezeichnet, wenn ich mir jedoch das BIld auf der Zweiten Form anschauen möchte, dann hagelt es AVs! Ich habe noch einen zweiten Algorythmus, bei dem die Bilder zufällig gesetzt werden, da klappts.

Hier der Source:

Delphi-Quellcode:
  if (cobxType.Text = 'Kacheln') and (LbxSelectedPictures.Count > 0)
    then
      begin
        helpBMP := TBitmap.Create;
        // Das Hilfsbitmap
        FBuffer.Width := SpedBildx.Value;
        FBuffer.Height := round(SpedBildx.Value/4*3);
        FBuffer.Canvas.Brush.Color := pBackground.Color;
        FBuffer.Canvas.Rectangle(-1,-1,FBuffer.Width+1,FBuffer.Height+1);
        try
          for x := 0 to (FBuffer.Width div SpEdKachelnX.Value)+1 do
          for y := 0 to (FBuffer.Height div SpEdKachelnY.Value)+1 do
            begin
              r := random(LbxSelectedPictures.Count); // Random Bild auswählen
              helpBMP.LoadFromFile(LbxSelectedPictures.Items.Strings[r]); // und ins Bitmap laden
              FBuffer.Canvas.StretchDraw // Es sollen Kacheln sein, also auf eine einheitliche größe damit
              (bounds
                (x*SpEdKachelnX.Value
                ,y*SpEdKachelnY.Value
                ,SpEdKachelnX.Value
                ,SpEdKachelnY.Value)
              ,HelpBMP);

            end;
          imSmallView.Canvas.StretchDraw(bounds(0,0,imSmallView.Width,imSmallView.Height),FBuffer);
              // Ins Vorschaubild zeichnen
        finally
          helpBMP.Free;
        end;

        with FrmShowPicture.image1 do // Und hier das Bild in Originalgröße auf die Zweite Form
          begin
            width := FBuffer.Width;
            height := FBuffer.Height;
            Picture.Bitmap.Width := width;
            Picture.Bitmap.Height := height;
            Canvas.Draw(0,0,FBuffer);
          end;
          FrmShowPicture.ClientWidth := FrmShowPicture.image1.Width;
          FrmShowPicture.ClientHeight := FrmShowPicture.image1.Height;
          FrmShowPicture.ClientWidth := FrmShowPicture.image1.Width;
          FrmShowPicture.ClientHeight := FrmShowPicture.image1.Height;
      end;
  // Wenn ich hier, FrmShowPicture.show aufrufe dann knallts
Hab keine Ahnung woran das liegen kann, bitte helft mir!

Gruß Richard


Edit1: Habe grade bemerkt, dass wenn ich das programm beende, nachdem ich das Bild generiert habe, dann kriege ich ein "EExternalError" aber nur manchmal... ich bin ratlos
Richard Mahr
  Mit Zitat antworten Zitat