AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bmp.assign(Image.picture) -->leeres bild????

Ein Thema von SimStar001 · begonnen am 25. Mär 2008 · letzter Beitrag vom 25. Mär 2008
Antwort Antwort
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 10:21
Hallo,ich ahbe hier ein kleineres Problem, bei dem ich net weiterkomme!

und zwar zeichnen ich über canvas auf einem IMAGE ein Bild. Dieses will ich dann an den Drucker schicken um es zu drucken.

Dazu muss ich vorher einen bestimmten code ausführen, allerdings ist das bild dann hinterher nicht vorhanden, bzw nur weiß! speichere ich es allerdings vorher auf der Festplatte und lade es dann wieder dann klappt das ganze! hat jemand ne ahnung wieso!`?


hier der code den ich eigentlich ausführen möchte und der nicht klappt:
Delphi-Quellcode:
var pic : tjpegimage;
begin
...
pic := tjpegimage.create;
pic.assign(image1.picture.graphic);
with printer do
  begin
  ...
  strechdraw(0,0,breite,hoehe,pic);
  ...
  end;
...
end;


wer hat ne idee wieso das net klappt!
Marco Tröger
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 13:20
Probier mal Folgendes:

Delphi-Quellcode:
var pic : tjpegimage;
begin
...
pic := tjpegimage.create;
pic.assign(image1.picture.graphic);

//Neues TImage auf Form klatschen
Image2.Picture.Assign(Pic);
//Wenn in Image2 jetzt das Bild angezeigt wird, liegts an StretchDraw.
...
end;
Ich vermute, dass es an StretchDraw bzw. der geräteabhängigen internen Bitmap von TJpegImage liegt.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#3

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 14:17
gut wird auf image 2 angezeigt! und waskann ich da jetzt machen?
Marco Tröger
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 14:29
Wahrscheinlich reicht es schon, die JPEG-Grafik aus dem TImage in eine TBitmap zu kopieren. Dann:
Delphi-Quellcode:
  ...
  TempBMP.Assign(Pic);
  TempBMP.HandleType := bmDIB;
  with Printer do begin
    ...
    Canvas.StretchDraw(R, TempBMP);
  end;
Ansonsten habe ich hier noch eine uralte Prozedur rumliegen, die (glaube ich) auch mal funktioniet hat.

Delphi-Quellcode:
procedure StretchBitmapToPrinter(TargetCanvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
var
  BitmapHeader: pBitmapInfo;
  BitmapImage: Pointer;
  HeaderSize: DWORD;
  ImageSize: DWORD;
begin
    GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
    GetMem(BitmapHeader, HeaderSize);
    GetMem(BitmapImage, ImageSize);
    try
      GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);
      StretchDIBits(TargetCanvas.Handle,
        DestRect.Left, DestRect.Top, // Destination Origin
        DestRect.Right - DestRect.Left, // Destination Width
        DestRect.Bottom - DestRect.Top, // Destination Height
        0, 0, // Source Origin
        Bitmap.Width, Bitmap.Height, // Source Width & Height
        BitmapImage,
        TBitmapInfo(BitmapHeader^),
        DIB_RGB_COLORS,
        SRCCOPY);
    finally
      FreeMem(BitmapHeader);
      FreeMem(BitmapImage);
   end;
end;
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 15:22
StretchDraw() wird von den meisten Druckertreibern nicht unterstützt und von daher ist StretchDIBits die einzige Möglichkeit auf eine hohe Unterstützung zurück greifen zu können. Die grösste Anzahl der Druckertreiber unterstützen StretchDIBits().
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#6

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 19:50
vielen dank für die Hilfe!


Delphi-Quellcode:
...
  TempBMP.Assign(Pic);
  TempBMP.HandleType := bmDIB;
  with Printer do begin
    ...
    Canvas.StretchDraw(R, TempBMP);
  end;
...



bei diesem code hängt sich mein rechner immer auf!


achso, was ich vergessen hatte zu erwähnen, wenn ich das bild auf festplatte speichere ist es150mb groß!


und was muss ich bei dem zweite code beispiel als variablen übergeben?

kenn diese net!


dankö!
Marco Tröger
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: bmp.assign(Image.picture) -->leeres bild????

  Alt 25. Mär 2008, 20:48
Zitat:
bei diesem code hängt sich mein rechner immer auf! ouch!
achso, was ich vergessen hatte zu erwähnen, wenn ich das bild auf festplatte speichere ist es150mb groß!
Das JPEG ist 150 MB groß? Was hat das denn für eine Auflösung?
Was du natürlich immer machen kannst, ist, das Bild "gekachelt" auf den Drucker auszugeben. Also immer nur ein Rechteck mit beschränkter Größe (siehe Bild). Das erfordert zwar ein bischen mehr Code, aber dir geht dann nicht mehr so schnell der Speicher aus. AFAIK müsstest du dir dafür aber noch eine andere JPEG-Komponente suchen, weiß nicht ob TJpegImage für sowas flexibel genug ist.
Miniaturansicht angehängter Grafiken
gitter_920.jpg  
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:57 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