![]() |
Frage(n) zu Device Independent Bitmaps
Hi,
ich möchte gerne Bitmaps ausdrucken, dazu brauche ich DIBs und die Win32API Funktion StretchDIBits. Wie's aussieht bringt die VCL keine vernünftige Klasse mit, die man dazu benutzen könnte. Was ich brauche wäre quasi ein TBitmap mit LoadFromFile, Canvas usw. aber halt für DIBs und mit Zeiger auf Info-Header und Bits-Daten. TBitmap.HandleType := bmDIB bringt leider gar nichts. Gibts da eine brauchbare Lösung? :? Gruß, Dani |
Re: Frage(n) zu Device Independent Bitmaps
Moin!
Hä? Wo ist denn das Problem? TBitmap kapselt doch nur ein HBITMAP inklusive einer DC, PEN und Brush. Wenn du z.B. GetDIBits() aufrufen willst, dann gib ihm doch einfach Bitmap.Handle - das ist doch das HBITMAP Handle was du dafür brauchst. Ich kapier irgendwie die Frage nicht... Und wieso brauchst du sowas zum ausdrucken? Das übliche Problem, dass BitBlt() und StretchBlt() nicht von jedem Druckertreiber unterstützt werden? MfG Muetze1 |
Re: Frage(n) zu Device Independent Bitmaps
Zitat:
1. Wenn ich mit TBitmap.LoadFromFile eine .DIB Datei lade, ist HandleType immer bmDDB. 2. TBitmap kapselt zwar HBITMAP usw., aber wenn ich mit GetDIBits an die Bitmap Bits kommen will muss ich einen neuen Bitmap-Daten-Puffer einrichten. Das ist Speicher-Verschwendung. 3. Wozu mit GetDIBits ein DDB in ein DIB umwandeln, wenn man von Anfang an mit DIBs arbeiten kann? Zitat:
|
Re: Frage(n) zu Device Independent Bitmaps
Moin!
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
MfG
Procedure PrintPicture(ABitmap : TBitmap);
// from: [url]http://www.scalabium.com/faq/dct0090.htm[/url] Var Info: PBitmapInfo; InfoSize: DWORD; Image: Pointer; ImageSize: DWORD; Bits: HBITMAP; ScaleX, ScaleY: Integer; DIBWidth, DIBHeight: LongInt; Begin Printer.BeginDoc; Try Canvas.Lock; Try { Paint bitmap to the printer } With Printer Do Begin Bits := ABitmap.Handle; ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch; ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch; GetDIBSizes(Bits, InfoSize, ImageSize); Info := AllocMem(InfoSize); Try Image := AllocMem(ImageSize); Try GetDIB(Bits, 0, Info^, Image^); With Info^.bmiHeader Do Begin DIBWidth := biWidth; DIBHeight := biHeight; End; StretchDIBits(Canvas.Handle, 0, 0, DIBWidth*ScaleX, DIBHeight*ScaleY, 0, 0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY); Finally FreeMem(Image, ImageSize); End; Finally FreeMem(Info, InfoSize); End; End; Finally Canvas.Unlock; End; Finally Printer.EndDoc; End; End; Muetze1 |
Re: Frage(n) zu Device Independent Bitmaps
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Vielleicht stimmt ja was mit meinen gespeicherten DIBs nicht (benutze Micrografx PicturePublisher). Würde mich interessieren, was das kleine Programm im Anhang mit Test.dib bei dir ausgibt... |
Re: Frage(n) zu Device Independent Bitmaps
Moin!
Also die Ladezeit kommt nur durch das DDB zustande, wenn ich eine DIB lade, habe ich egal wie gross, immer 0:000 Sekunden Ladezeit. Dann ist mir die Abfrage der DPI Zahl nicht geheuer - da ist es doch fast logisch, dass dort eine an den Bildschirm angepasste DPI Zahl kommt, schliesslich müsste sonst das ganze umgerechnet werden bei jeder Aktion. Und dein Bitmap ist wirklich ein DDB und enthält keine Palette und ist daher device dependent. Zitat:
Zitat:
MfG Muetze1 |
Re: Frage(n) zu Device Independent Bitmaps
So, habe jetzt auch mal mit Paint ein neues Bitmap erstellt und gespeichert. Siehe da es ist ein DIB. Werde mich jetzt mal nach einem anderen (besseren?) Grafikprogramm umsehen :wall:
Vielen vielen Dank für die Hilfe Muetze1!!! Ich wusste gar nicht, dass man Bitmaps überhaupt im device dependent Format abspeichern kann... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz