Bonjour

Je souhaite extraire une region d'un bitmap pour la "strecher" dans le canvas de l'imprimante. J'utilise donc le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
var source : TBitmap;
    BitmapHeader:  pBitmapInfo;
    BitmapImage :  POINTER;
    HeaderSize  :  LONGWORD;
    ImageSize   :  LONGWORD;
 
begin
 try
  source:=TBitmap.Create;
  source.HandleType:= bmDIB;
 
  source.LoadFromFile('C:\mon bitmap.bmp');
  source.PixelFormat:= pf24Bit;
 
  Printer.BeginDoc;
 
  GetDIBSizes(source.Handle, HeaderSize, ImageSize);
  GetMem(BitmapHeader, HeaderSize);
  GetMem(BitmapImage,  ImageSize);
  try
   GetDIB(source.Handle, source.Palette, BitmapHeader^, BitmapImage^);
 
   Printer.Canvas.Lock;
 
   SetStretchBltMode(Printer.Canvas.Handle,HALFTONE);
 
   StretchDIBits(Printer.canvas.Handle,
                 0, 0,                                  
                 Printer.PageWidth,                    
                 Printer.PageHeight,   
                 0, 0,                           
                 source.Width, source.Height,   
                 BitmapImage,
                 TBitmapInfo(BitmapHeader^),
                 DIB_RGB_COLORS,
                 SRCCOPY);
 
   Printer.Canvas.Unlock;
 
   Pinter.EndDoc;
 
  finally
   FreeMem(BitmapHeader);
   FreeMem(BitmapImage)
  end;
 
 finally
  source.Free;
 end;
Et là rien ne se produit : une page vide, blanche ! Par contre si je supprime la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SetStretchBltMode(Printer.Canvas.Handle,HALFTONE);
là la page est bien remplie mais le résultat est décevant.

J'ai fais la même expérience avec le canvas d'un bitmap que je sauvegarde dans un fichier et même résultat. Donc j'en déduis que ce n'est pas un problème d'imprimante puisque ça le fait aussi sur un canvas de bitmap.

Comment faire pour extraire une portion d'image et l'étirer dans un canevas sans dégradation d'image ?

Si je teste avec 300 ppp (un canvas de 3389x2380 en mode paysage) cela fonctionne. En revanche avec du 600 ppp (un canvas de 6778x4760) le problème apparaît.

Quelqu'un a-t-il une idée ?

Merci pour votre aide