Unity調(diào)用打印機打印圖片
本文實例為大家分享了Unity打印機打印圖片的具體代碼,供大家參考,具體內(nèi)容如下
1、調(diào)用打印機首先就是要配置好打印機
就是電腦跟打印機已經(jīng)連接好,有默認(rèn)的打印機可以啟動使用
2、調(diào)用方式
(1)使用外部第三方軟件exe
代碼如下:(就兩句)
string path = Application.dataPath + @"\Textures\002.png"; System.Diagnostics.Process.Start("mspaint.exe", path);//調(diào)用第三方應(yīng)用去打印(其中path是要打印圖片的路徑,而mspaint.exe是調(diào)用Windows中的畫板,然后從畫板里啟用打印功能)
(2)使用win自帶軟件
這個需要下載一個應(yīng)用(應(yīng)用會放在我的博客下載文件中名字是PrintImage.exe)
然后直接上代碼:
public void Test() { string path = Application.dataPath + @"\Textures\002.png,0,0,750,400";//從紙張的0. 0點,將圖像調(diào)整為750×350點(計算:150mm/28.346 px/cm=529點,100mm/28.346 pm/cm=352點) 圖片路徑 string exepath = Application.streamingAssetsPath + @"\PrintImage.exe";//這個是需要下載的應(yīng)用直接放到電腦上就行(調(diào)用打印機打印圖片應(yīng)用的路徑) ProcessStartInfo info = new ProcessStartInfo(exepath);//指定啟動進(jìn)程時使用的一組值 info.Arguments = path;//獲取或設(shè)置啟動應(yīng)用程序時要使用的一組命令行自變量 using (Process p=new Process()) { p.StartInfo = info; p.Start(); } }
(3)自己進(jìn)行打印
/// <summary> /// 打印 /// </summary> public void PrintFile() { PrintDocument pri = new PrintDocument(); pri.PrintPage += Printpagetest; pri.Print(); } private void Printpagetest(object sender, PrintPageEventArgs e) { try { System.Drawing.Image image = System.Drawing.Image.FromFile(printPath); System.Drawing.Graphics g = e.Graphics; g.TranslateTransform(_4AHeight, 0); g.RotateTransform(90); g.DrawImage(image, 0, 0, _4AWidth, _4AHeight); } catch (Exception ee) { Debug.LogError(ee.Message); } }
(這里的第三種我還未進(jìn)行測試,如出現(xiàn)錯誤無法實現(xiàn)請指正)
這里我選擇的是第二種,1不好實現(xiàn)靜默,3太麻煩,2使用是后臺調(diào)用命令行
3、顏色問題
同時這里本人還找到了有博主自己寫的調(diào)用打印機方法
項目中需要用到調(diào)用打印機打印圖片,原本覺得會很復(fù)雜,結(jié)果一搜索發(fā)現(xiàn)Assetstore有相應(yīng)的插件。在網(wǎng)上找到別人分享的插件,完美的實現(xiàn)了功能,所以現(xiàn)在也來分享一下(因為想看到具體實現(xiàn),所以用工具反編譯了DLL,原本插件是直接導(dǎo)入就可以的)。
using System; using System.Diagnostics; using System.Drawing.Printing; using System.IO; using UnityEngine; namespace LCPrinter { public static class Print { public static void PrintTexture(byte[] texture2DBytes, int numCopies, string printerName) { if (texture2DBytes == null) { UnityEngine.Debug.LogWarning("LCPrinter: Texture is empty."); return; } PrinterSettings printerSettings = new PrinterSettings(); if (printerName == null || printerName.Equals("")) { printerName = printerSettings.PrinterName; UnityEngine.Debug.Log("LCPrinter: Printing to default printer (" + printerName + ")."); } string str = string.Concat(new string[] { DateTime.Now.Year.ToString(), "-", DateTime.Now.Month.ToString(), "-", DateTime.Now.Day.ToString(), "-", DateTime.Now.Hour.ToString(), "-", DateTime.Now.Minute.ToString(), "-", DateTime.Now.Second.ToString(), "-", DateTime.Now.Millisecond.ToString() }); string text = (Application.persistentDataPath + "\\LCPrinterFiletmp_" + str + ".png").Replace("/", "\\"); UnityEngine.Debug.Log("LCPrinter: Temporary Path - " + text); File.WriteAllBytes(text, texture2DBytes); Print.PrintCMD(text, numCopies, printerName); } public static void PrintTextureByPath(string path, int numCopies, string printerName) { PrinterSettings printerSettings = new PrinterSettings(); if (printerName == null || printerName.Equals("")) { printerName = printerSettings.PrinterName; UnityEngine.Debug.Log("LCPrinter: Printing to default printer (" + printerName + ")."); } Print.PrintCMD(path, numCopies, printerName); } private static void PrintCMD(string path, int numCopies, string printerName) { Process process = new Process(); try { for (int i = 0; i < numCopies; i++) { process.StartInfo.FileName = "rundll32"; process.StartInfo.Arguments = string.Concat(new string[] { "C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_PrintTo \"", path, "\" \"", printerName, "\"" }); process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = true; process.Start(); } } catch (Exception arg) { UnityEngine.Debug.LogWarning("LCPrinter: " + arg); } finally { process.Close(); UnityEngine.Debug.Log("LCPrinter: Texture printing."); } } } }
這是實現(xiàn)功能的源碼。調(diào)用方法如下:
using UnityEngine; using System.Collections; using System.Diagnostics; using System; using System.IO; using LCPrinter; using UnityEngine.UI; public class LCExampleScript : MonoBehaviour { public Texture2D texture2D; public string printerName = ""; public int copies = 1; public InputField inputField; public void printSmileButton() { Print.PrintTexture(texture2D.EncodeToPNG(), copies, printerName);//打印一張編輯器中的圖片 } public void printByPathButton() { Print.PrintTextureByPath("D:\\pic.png", copies, printerName);//打印一張存在指定路徑的圖片 } }
由于原本插件是添加好引用的,反編譯之后缺少了引用,所以要去統(tǒng)一的安裝路徑E:\ unity5.3.2 \統(tǒng)一\編輯\數(shù)據(jù)\單聲道\ lib中\(zhòng)單\ 2.0(這是我本地安裝的路徑)中找到System.Drawing.dll程序程序放入項目中的插件下。如在VS中報錯沒有添加引用,則要對項目添加引用
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:詳解C#中的字符串拼接@ $
欄 目:C#教程
下一篇:C# 實現(xiàn)PPT 每一頁轉(zhuǎn)成圖片過程解析
本文標(biāo)題:Unity調(diào)用打印機打印圖片
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4635.html
您可能感興趣的文章
- 01-10C#調(diào)用dos窗口獲取相關(guān)信息的方法
- 01-10同步調(diào)用和異步調(diào)用WebService
- 01-10C#調(diào)用WebService實例開發(fā)
- 01-10C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法
- 01-10Unity3d獲取系統(tǒng)時間
- 01-10Unity3D獲取當(dāng)前鍵盤按鍵及Unity3D鼠標(biāo)、鍵盤的基本操作
- 01-10C# 調(diào)用 JavaWebservice服務(wù)遇到的問題匯總
- 01-10基于C#實現(xiàn)手機號碼歸屬地接口調(diào)用
- 01-10C#使用Process類調(diào)用外部exe程序
- 01-10Windows下C#的GUI窗口程序中實現(xiàn)調(diào)用Google Map的實例


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子