AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [gelöst] Bild vergrößern mit StretchBlt
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] Bild vergrößern mit StretchBlt

Ein Thema von Schwedenbitter · begonnen am 1. Apr 2009 · letzter Beitrag vom 2. Apr 2009
Antwort Antwort
Seite 2 von 2     12   
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Bild vergrößern mit StretchBlt

  Alt 2. Apr 2009, 10:43
Zitat von EWeiss:
EDIT:
Verstehe auch nicht warum du von Image1 ausgehst
Hier solltest du das Originale Bitmap verwenden oder willst du das
320xXXX Bitmap abspeichern ?
Das ist dann aber sehr verpixelt.

Denke Image1 ist ein als Vorschaubild gedacht oder?
Die Antworten haben sich alle überschnitten:

Ja, das soll nur zur Vorschau sein. Ich habe - zu Testzwecken - meinen Code geändert. Entschuldigung falls es noch nicht in meinem Paket so war. Es sieht jetzt so aus:
Delphi-Quellcode:
Procedure TForm1.Button5Click(Sender: TObject);
Var
   H,B         : Integer;
   help,Org      : TImage;
Begin
   help:=TImage.Create(self);
   Org:=TIMage.Create(self);
   Try
      Org.Picture.LoadFromFile(OpenDialog1.FileName);
      SetStretchBltMode(help.Canvas.Handle,HALFTONE);
      B:=Org.Picture.Width;
      H:=Org.Picture.Height;
      ShowMessage(FormatFloat('#,##0',B)+'x'+FormatFloat('#,##0',H));
      If H>B Then
      Begin
         help.Picture.Graphic.Width:=1660;
         help.Picture.Graphic.Height:=2340;
         StretchBlt(help.Canvas.Handle,   // Ziel
                    0,0,1660,2340,         // Ziel Ausmaße
                    Org.Canvas.Handle,      // Quelle
                    0,0,B,H,               // Ausmaße Quelle
                    SRCCOPY)
      End
      Else
      Begin
         help.Picture.Graphic.Width:=2340;
         help.Picture.Graphic.Height:=1660;
         StretchBlt(help.Canvas.Handle,   // Ziel
                    0,0,2340,1660,         // Ziel Ausmaße
                    Org.Canvas.Handle,      // Quelle
                    0,0,H,B,               // Ausmaße Quelle
                    SRCCOPY);
      End;
      help.Picture.Bitmap.SaveToFile(OpenDialog1.FileName+'_neu.bmp');
   Finally
      help.Free;
      Org.Free;
   End;
End;
Das verpixelte Aussehen ist nur jetzt so und mir egal. Habe kein anderes Testbild gefunden. Mein Fernziel ist es, ein Programm zu schreiben, dass mir Bilder von Scannern besorgt (einer kann z.B. nur 300 oder 600 dpi) , diese auf DINA4 bei exakt 200 dpi zuschneidet (ich will es einheitlich für ein schon fertiges Archivprogramm) und ggf. noch dreht.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Bild vergrößern mit StretchBlt

  Alt 2. Apr 2009, 10:51
nö da hat sich nichts überschnitten ..

Hier ein Bild.. denke so soll es sein oder ?
Delphi-Quellcode:
Procedure TForm1.Button6Click(Sender: TObject);
var
tmpImage : TImage;

Begin
  tmpImage := TImage.create(self);

   If OpenDialog1.Execute Then
   Begin
    tmpImage.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
    StretchBlt(Image1.Canvas.Handle,    // Ziel
      0,0,Image1.Width,Image1.Height, // Ziel Ausmaße
      tmpImage.Canvas.Handle,    // Quelle
      0,0,tmpImage.Picture.Bitmap.Width,tmpImage.Picture.Bitmap.Height,   // Ausmaße Quelle
      SRCCOPY);

      Button3.Enabled:=True;
      Button4.Enabled:=True;
      Button5.Enabled:=True;
   End;
End;
gruss Emil
Miniaturansicht angehängter Grafiken
ghh_649.jpg   full_192.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: Bild vergrößern mit StretchBlt

  Alt 2. Apr 2009, 11:14
Wenn du immer noch nicht klar kommst hier das ergebnis

Nur unteren Bereich geändert!

Delphi-Quellcode:
Procedure TForm1.Button5Click(Sender: TObject);
Var
   H,B : Integer;
   help,Org : TImage;
Begin
   help:=TImage.Create(self);
   Org:=TIMage.Create(self);
   Try
      Org.Picture.LoadFromFile(OpenDialog1.FileName);
      SetStretchBltMode(help.Canvas.Handle,HALFTONE);
      B:=Org.Picture.Width;
      H:=Org.Picture.Height;
      ShowMessage(FormatFloat('#,##0',B)+'x'+FormatFloat('#,##0',H));
      If H>B Then
      Begin
         help.Picture.Graphic.Width:=1660;
         help.Picture.Graphic.Height:=2340;
         StretchBlt(help.Canvas.Handle, // Ziel
                    0,0,1660,2340, // Ziel Ausmaße
                    Org.Canvas.Handle, // Quelle
                    0,0,B,H, // Ausmaße Quelle
                    SRCCOPY)
      End
      Else
      //>>>>>>>>>< geändert
      Begin
         help.Picture.Graphic.Width:=2340;
         help.Picture.Graphic.Height:=1660;
              StretchBlt(help.Canvas.Handle,    // Ziel
                    0,0,help.Picture.Graphic.Width,help.Picture.Graphic.Height, // Ziel Ausmaße
                    Org.Canvas.Handle,    // Quelle
                    0,0,Org.Picture.Bitmap.Width,Org.Picture.Bitmap.Height,               // Ausmaße Quelle
                    SRCCOPY);
      End;
      // >>>>>>>>>>>> end geändert
      help.Picture.Bitmap.SaveToFile(OpenDialog1.FileName+'_neu.bmp');
   Finally
      help.Free;
      Org.Free;
   End;
End;

Procedure TForm1.Button6Click(Sender: TObject);
Begin
   If OpenDialog1.Execute Then
   Begin
      Image1.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
      Button3.Enabled:=True;
      Button4.Enabled:=True;
      Button5.Enabled:=True;
   End;
End;
gruss Emil
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Bild vergrößern mit StretchBlt

  Alt 2. Apr 2009, 11:23
Zitat von EWeiss:
Hier ein Bild.. denke so soll es sein oder ?
Nein, leider nicht. Das Image1 ist zweitrangig. Ich will nicht das Bild im Programm ausgeben. Das macht doch TImage allein passend, wenn man die Eigenschaften richtig setzt.

Ich möchte:
1. Bild laden (egal welche Größe)
2. vergrößern oder verkleinern auf 1660x2340 (= DINA4 bei 200 dpi)
3. DINA4-Bild abspeichern

Und so klappt es jetzt endlich, auch wenn Du erster warst:
Delphi-Quellcode:
Procedure TForm1.Button5Click(Sender: TObject);
Var
   H,B         : Integer;
   Quelle,Ziel   : TImage;
Begin
   If OpenDialog1.Execute Then
   Begin
      Quelle:=TImage.Create(self);
      Ziel:=TImage.Create(self);
      Try
         Quelle.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
         B:=Quelle.Picture.Bitmap.Width;
         H:=Quelle.Picture.Bitmap.Height;
         If H>B Then
         Begin
            Ziel.Width:=1660;
            Ziel.Height:=2340;
            StretchBlt(Ziel.Canvas.Handle,   // Ziel
                       0,0,1660,2340,         // Ziel Ausmaße
                       Quelle.Canvas.Handle,   // Quelle
                       0,0,B,H,               // Ausmaße Quelle
                       SRCCOPY)
         End
         Else
            Ziel.Width:=2340;
            Ziel.Height:=1660;
            StretchBlt(Ziel.Canvas.Handle,   // Ziel
                       0,0,2340,1660,         // Ziel Ausmaße
                       Quelle.Canvas.Handle,   // Quelle
                       0,0,B,H,               // Ausmaße Quelle
                       SRCCOPY);
         Ziel.Picture.Bitmap.SaveToFile(OpenDialog1.FileName+'_neu.bmp');
      Finally
         Quelle.Free;
         Ziel.Free;
      End;
   End;
End;
Danke an alle, die so aktiv mitgedacht haben!!!
Alex Winzer
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

Re: [gelöst] Bild vergrößern mit StretchBlt

  Alt 2. Apr 2009, 11:25
Zitat:
Und so klappt es jetzt endlich, auch wenn Du erster warst:
hmmm...
Das erste war nur ein Beispiel um zu zeigen was du falsch gemacht hast.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz