Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DIB aus TBitmap erstellen? (https://www.delphipraxis.net/94502-dib-aus-tbitmap-erstellen.html)

Nuclear-Ping 22. Jun 2007 10:25


DIB aus TBitmap erstellen?
 
Hallo,

ich teste grad die Virtual Print Engine (VPE) von "IDEAL" Software und stoße hier schon auf die erste Hürde.

Scheinbar gibt es in der ganzen API nur eine Funktion, um Bilder NICHT aus einer Datei zu laden und die nennt sich "PictureDIB".
Code:
method long VPE.PictureDIB(long Left, long Top, long Right, long Bottom,
IntPtr [long] hDIB, PictureFlags [long] Flags)
Nach einer Suche in deren Forum bin ich auf diesen Beitrag gestoßen: http://idealsoftware.com/phpBB2/viewtopic.php?t=75

Dort meint der Support, dass es möglich ist, eine TBitmap zu drucken, wenn man sie in eine DIB umwandelt, die im "Global Memory" liegt. (Hä?)

Nach etwas rumgoogeln bin ich auch nicht schlauer geworden, ganz im Gegenteil. Ich bin auf http://www.codeguru.com/cpp/g-m/bitm...cle.php/c1693/ gestoßen, beim Lesen davon danke ich aber auch gleich ab. Ausserdem liegt die Bitmap nicht als Datei vor, sondern wird aus einer Datenbank eben in ein TBitmap geladen.

Dann habe ich noch das gefunden: http://delphi.pjh2.de/articles/graphic/bitmap.php
Zitat:

Um ein TBitmap in ein DIB zu verwandeln, kann TBitmap.SaveToStream benutzt werden.
... und dann? Das Handle des Streams als hDIB übergeben?

Bei dem ganzen frage ich mich auch, ob das wirklich so eine "IDEAL"e Methode ist, um Bilder an eine Druck-Engine zu übergeben, die über 400,- EUR kostet? Gehts bitte nicht noch komplizierter und zeitverschwenderischer ...? :wall: Würde die Demo nicht so gut aussehen und der Rest den es gibt mich auch nicht überzeugt, wäre das für mich schon ein Grund, diesem Produkt den Rücken zu kehren.

Hat jemand Erfahrungen mit der VPE und kann mir mit dem Bitmap->DIB Thema auf die Sprünge helfen?

Grüße,

Mario

Robert Marquardt 22. Jun 2007 10:32

Re: DIB aus TBitmap erstellen?
 
Schlag mal in der Delphi-Hilfe TBitmap.HandleType nach.

Nuclear-Ping 22. Jun 2007 10:53

Re: DIB aus TBitmap erstellen?
 
Zitat:

type TBitmapHandleType = (bmDIB, bmDDB);
property HandleType: TBitmapHandleType;
Alles klar. Vielen Dank. ;)

Hab damit noch nie gearbeitet und der Kommentar von dem "Supporter" da hat mich doch stark verwirrt: "I recommend you google for some source code examples."

Edit:
Hm, scheint nicht so einfach zu klappen.
Delphi-Quellcode:
  HsReport.OpenDoc;
  HsReport.AutoBreakMode := AUTO_BREAK_NO_LIMITS;

  tmpBmp := TBitmap.Create;
  tmpBmp.Assign (FClientData.Image);
  tmpBmp.HandleType := bmDIB;

  { // Klappt
  tmpBmp.SaveToFile ('tmp.bmp');
  HsReport.Picture(150, 150, VFREE, VFREE,
    'tmp.bmp', PIC_KEEPIMAGE + PIC_IN_FILE);
  }

  // Klappt nicht
  HsReport.PictureDIB (100, 100,
    VFREE,
    VFREE,
    tmpBmp.Handle,
    PIC_KEEPIMAGE + PIC_IN_FILE);

  HsReport.Preview;
Mit der Methode, das Bild erst auf die Platte zu speichern und dann zu laden, klappt es. Da zeigt er mir es auf der Vorschau an. Die zweite Methode jedoch funktioniert nicht. Da krieg ich nur ein leeres durchgekreuztes Quadrat, da wo das Bild sein sollte.

Edit 2:
Nach weiterem rumlesen in dem Forum scheint die Methode, die Dateien von der Platte zu laden die bessere Methode zu sein.

http://idealsoftware.com/phpBB2/viewtopic.php?t=236
Zitat:

We do not recommend to use this function, because it must hold the image always in memory. If you are using the standard Picture() method, which reads a file from disk, it can cache the image, which means it will be removed from memory if it is not displayed / printed for a longer period of time, and it will be reloaded as necessary.
Von daher hat sich das DIB-Thema für mich erledigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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