2017-05-09 49 views
-5

我想將VerticalResolution和位圖的Horizo​​ntalResolution更改爲固定值300更改圖像對象的DPI

我有一個Windows服務需要一些TIFF並執行一些條形碼相關的操作。除此之外,我從單頁頁面創建了多頁TIFF。

問題是原來的DPI總是300,結果有96 DPI。

即使解析度相同且文件大小不變(考慮附加頁面),這似乎是唯一相關的區別。

這是相關的,因爲我需要在每個文件300 DPI。

這是我認爲原因在於代碼,從這裏取:https://www.codeproject.com/Articles/16904/Save-images-into-a-multi-page-TIFF-file-or-add-ima

private Bitmap ConvertToBitonal(Bitmap original) 
    { 
     Bitmap source = null; 

     // If original bitmap is not already in 32 BPP, ARGB format, then convert 
     if (original.PixelFormat != PixelFormat.Format32bppArgb) 
     { 
      source = new Bitmap(original.Width, original.Height, PixelFormat.Format32bppArgb); 
      source.SetResolution(original.HorizontalResolution, original.VerticalResolution); 
      using (Graphics g = Graphics.FromImage(source)) 
      { 
       g.DrawImageUnscaled(original, 0, 0); 
      } 
     } 
     else 
     { 
      source = original; 
     } 
    // some stuff here 

    // Create destination bitmap 
      Bitmap destination = new Bitmap(source.Width, source.Height, PixelFormat.Format1bppIndexed); 

    // other stuff 
    } 

調試它,我看到指令之前:

Bitmap destination = new Bitmap(source.Width, source.Height, PixelFormat.Format1bppIndexed); 

位圖有VerticalResolution 300水平分辨率300. 它變成96x96。

我該如何改變這些圖片屬性,以使圖片具有300 DPI?


使用SetResolution方法來設置原始Xdpi和Ydpi解決,默認DPI爲新的位圖對象是96x96的如在下面的答案指出。

+1

顯示我們一個[MCVE],我們可以幫助你。 – TheLethalCoder

+0

我們不是在這裏爲你寫代碼 – MickyD

+0

我在問是否有方法來設置我不能直接設置的屬性。不要爲我寫代碼。我將添加更多信息 – refex

回答

1

該代碼創建一個位圖目標。位圖的分辨率默認爲96dpi x 96 dpi。由於沒有其他分辨率設置輸出文件具有默認分辨率...

您的問題的答案可以在參考手冊中找到。

https://msdn.microsoft.com/en-us/library/system.drawing.bitmap(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setresolution(v=vs.110).aspx

public void SetResolution(
     float xDpi, 
     float yDpi 
    ) 

設置此位圖的分辨率。

如果你會明白你提供你試過從某處複製,你會意識到你已經有了答案,你的問題就在你面前的代碼...

source.SetResolution(original.HorizontalResolution, original.VerticalResolution); 
+0

我終於看到了它。 – refex

+0

由於該函數不止一次創建一個新的Bitmap對象,並且自從第一次使用SetResolution方法重新分配原始DPI時,我認爲即使在第二次保留原始DPI時它也會重新分配它。此代碼來自一個使用CPOL 1.02許可證的項目。在我的項目中使用它有什麼問題?你知道你的代碼的每一個依賴的每一行嗎?難道你不想對別人的代碼做什麼假設嗎? – refex

+0

@refex不,但我不稱它爲「我的代碼」,我通常不會問堆棧溢出問題,可以通過以下方式輕鬆回答:a)讀取我面前的10行代碼和/或b)閱讀我想改變屬性的類的參考手冊。如果你的代碼沒有達到你期望的效果,那麼你不能只是做出假設。閱讀它,嘗試理解每一行。記筆記...我的意思是,如果您的輸出有意想不到的解決方案時,發現只設置「源」的分辨率而不是「目的地」的分辨率有多難?你不需要成爲程序員。 – Piglet