Just nu i M3-nätverket
Jump to content

Storlek på printerutskrift


johnJ

Recommended Posts

Hej!

Jag vill skriva ut en jpeg bild på en skrivare. Har fått detta att fungera. Mitt problem är att utskriftsjobbet blir så stort och tar tid att överföras till skrivaren. Är ca 6.22MB att överföra till skrivaren, medans Windows bildvisare endast behöver 384kB för att skriva ut samma jpeg med samma kvalité. Vad kan jag göra för att minska storleken.

Jättetacksam för hjälp!

Mvh. John

		private void doc_InvoicePrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
	{
		// Draw a picture.
		e.Graphics.DrawImage(System.Drawing.Image.FromFile(mInvoiceFilename), e.Graphics.VisibleClipBounds);

		// Indicate that this is the last page to print.
		e.HasMorePages = false;
	}

 

Link to comment
Share on other sites

Hej

 

6.22 Mb låter ganska stort... Hur stor är bilden du skall skiva ut?

 

Kolla upp hur många pixlar skrivaren stödjer, testa sedan att skala ner bilden innan du skickar den till skrivaren. Det är ju onödigt att skicka en aldeles för stor bild till skrivaren...

 

Du kanske kan kolla upp hur många bitplan som skrivaren använder me... Om bilden har fler bitar per pixel än skrivaren så kan du nog tjäna några bytes på att konvertera bilden till ett format med färre bpp...

 

//Andreas

 

Link to comment
Share on other sites

6.22MB är mycket ja. Har testat på olika skrivare. Alla får samma storlek.

 

Jpeg bilden är 335kB och har 150 i dpi.

 

Kan det vara så att "bilden" som skapas för utskrift får för hög dpi? Om du har så är jag tacksam för kodtips om hur man utför allt du nämnde i ditt svar.

 

/John

 

Link to comment
Share on other sites

Ok, då stämmer storleken iaf... :)

 

1240*1754*3 = 6,22Mb

 

Tycker det verkar konstigt att du får ut hela bilden på skrivaren... Har du ställt in att den skall anpassa utskriften efter skrivaren??

 

Ett sätt att minska utskriftsstorleken är att skala ner bilden innan du skickar den...

 

Denna koden skalar ner bilden så att den fyller ut sidan så mycket den kan...

 

float ratioX = (float)ev.MarginBounds.Width / (float)PrintBitmap.Width;
float ratioY = (float)ev.MarginBounds.Height / (float)PrintBitmap.Height;

float ratio = Math.Min( ratioX, ratioY );

if( PrintBitmap != null )
 ev.Graphics.DrawImage( PrintBitmap,
   new Rectangle( ev.MarginBounds.Left, ev.MarginBounds.Top,
     (int)( PrintBitmap.Width * ratio ), (int)( PrintBitmap.Height * ratio ) ),
   new Rectangle( 0, 0, PrintBitmap.Width, PrintBitmap.Height ), GraphicsUnit.Pixel );

 

Testa ovanstående (eller liknande) och se om det gör nån skillnad...

 

//Andreas

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...