Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Principal";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

Para baixo

Problema com o tamanho da imagem ao imprimir Encontre agências semelhantes


Oleg Gashev   (2001-12-15 11:14) [0]

É impossível imprimir uma imagem com dimensões exatas. Ainda não imprime corretamente.
Eu faço isso. Encontre dimensões do Bitmapa em polegadas:
sx, sy: real; ABitmap: = Image1.Picture.Bitmap; sx: = ABitmap.Width / GetDeviceCaps (image1.canvas.handle, LOGPIXELSX); sy: = ABitmap.Height / GetDeviceCaps (image1.canvas.handle, LOGPIXELSY);

Agora eu acho as dimensões em pixels na impressora para impressão:
relwidth: = trunc (GetDeviceCaps (Printer.canvas.handle, LOGPIXELSX) * sx); relheight: = trunc (GetDeviceCaps (Printer.canvas.handle, LOGPIXELSY) * sy);

Impressão:
Printer.BeginDoc; DrawImage (Printer.Canvas, Rect (0, 0, relWidth, relHeight), ABitmap); Printer.EndDoc;

DrawImage:
procedure DrawImage (Tela: TCanvas; DestRect: TRect; ABitmap: TBitmap); Cabeçalho var, Bits: Ponteiro; HeaderSize: Cardeal; BitsSize: Cardinal; começar GetDIBSizes (ABitmap.Handle, HeaderSize, BitsSize); Cabeçalho: = AllocMem (HeaderSize); Bits: = AllocMem (BitsSize); tente GetDIB (ABitmap.Handle, ABitmap.Palette, Header ^, Bits ^); StretchDIBits (Canvas.Handle, DestRect.Left, DestRect.Top, DestRect.Right, DestRect.Bottom, 0, 0, ABitmap.Width, ABitmap.Height, bits, TBitmapInfo (cabeçalho ^), DIB_RGB_COLORS, SRCC; finalmente FreeMem (cabeçalho, cabeçalho); FreeMem (Bits, BitsSize); fim; fim;

Tudo isso imprime com o tamanho errado. Onde está o erro?

Atenciosamente, Oleg.



MrBeer   (2001-12-16 21:27) [1]

// Imprime bitmap X x Y milímetros de tamanho procedimento PrintBM (B: TBitmap; x_mm, y_mm: double); var resx, resy: double; começar resx: = Printer.PageWidth / GetDeviceCaps (Printer.Handle, LOGPIXELSX); resy: = Printer.PageHeight / GetDeviceCaps (Printer.Handle, LOGPIXELSY); Printer.Canvas.StretchDraw (Rect (0,0, redondo (x_mm * resx), redondo (y_mm * resy)), B); fim; // Imprimir bitmap X x tamanho Y em polegadas procedimento PrintBMInch (B: TBitmap; x_inch, y_inch: double); começar PrintBM (B, x_inch * 2.54, y_inch * 2.54); fim;



MrBeer   (2001-12-16 21:40) [2]

procedimento PrintSameSize (B: TBitmap); var scalex, scaley: double; começar scalex: = GetDeviceCaps (Printer.Handle, LOGPIXELSX) / GetDeviceCaps (B.Canvas.Handle, LOGPIXELSX); scaley: = GetDeviceCaps (Printer.Handle, LOGPIXELSY) / GetDeviceCaps (B.Canvas.Handle, LOGPIXELSY); Printer.Canvas.StretchDraw (Rect (0,0, redondo (B.Width * scalex), redondo (B.Hight * scaley)), B); fim;



MrBeer   (2001-12-16 21:48) [3]

A esli tak napisatj?
// ....
scalex: = GetDeviceCaps (Printer.Handle, LOGPIXELSX) / GetDeviceCaps (GetDC (0), LOGPIXELSX); scaley: = GetDeviceCaps (Printer.Handle, LOGPIXELSY) / GetDeviceCaps (GetDC (0), LOGPIXELSY);



Страницы: 1 filial inteira

Fórum: "Principal";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

em cima









Memória: 0.56 MB
Hora: 0.045 c
1-22112
Greenrul
2001-12-15 13:55
2002.01.08
Diga ao componente Button


14-22378
moderador
2001-11-08 07:51
2002.01.08
> Merilin


14-22372
froz
2001-11-08 16:25
2002.01.08
URGENTEMENTE!


1-22047
handra
2001-12-17 13:12
2002.01.08
Criação de ajuda


3-21951
olban
2001-12-05 11:07
2002.01.08
Usando o QuantumGrid





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol