2011-08-26 93 views
1

我正在寫一些東西來創建一個矢量格式文件的小型位圖預覽。從文件中我有一個(大)線座標列表。我想要做的是將其縮放以適合固定寬度的圖像(96x96)。我以前一直在繪製全尺寸的位圖,然後將其調整到96x96,但由於縮略圖需要動態創建,結果不夠快(並且這是在第一個地點!)。現在我只想縮放所有的座標,就好像原始大小是96x96一樣,放下所有相互重疊的點,這會大大提高性能。C#/ GDI圖形縮放(Drawline)

我是任何和所有的.NET Graphics/GDI東西的絕對新手,第一個版本非常簡單(代碼如下)。我想知道在圖形庫(或其他地方)中是否有某些東西可以做到這一點,而無需循環遍歷所有點並對每個點進行數學運算。

圖形/ GDI的大師可以指向正確的方向(或讓我知道沒有方向)嗎?我使用的是C#,.NET框架目標是確定的。

到目前爲止,這是很簡單的(tmpblocks是一個點的數組):

Bitmap DrawArea; 
Graphics xGraph; 

DrawArea = new Bitmap(64, 64); 
// ^- this is GetWidth() and GetHeight() when drawing the full file at full size 

xGraph = Graphics.FromImage(DrawArea); 

for (int i = 0; i < tmpblocks.Count; i++) 
{ 
if (tmpblocks[i].stitches.Length > 1) 
{ 
Pen tempPen = new Pen(tmpblocks[i].color, 1.0f); 
tempPen.StartCap = System.Drawing.Drawing2D.LineCap.Round; 
tempPen.EndCap = System.Drawing.Drawing2D.LineCap.Round; 
tempPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; 
xGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
xGraph.DrawLines(tempPen, tmpblocks[i].stitches); 
} 
} 

對於縮略圖我剛剛量級利用.GetThumbnail方法生成位圖。真的很慢,雖然(顯然)...

回答

1

您可以使用Graphics.ScaleTransform(float sx, float sy)來實現這一點。從TargetWidth/SourceWidth 和sy:

你可以從SX TargetHeight/SourceHeight

,其中目標是通過你的目標圖像尺寸定義,來源是你的源圖像大小。

+0

我看到了,並嘗試它,但我得到的是一個白色的BMP在角落裏有幾行.. – user802084

+0

啊,看起來我將不得不使用TranslateTransform ... – user802084

+0

我不知道爲什麼你將需要使用平移變換,除非矢量文件和圖形設備之間存在某些其他座標系差異,即y指向哪個方向。但是,如果這個答案有幫助,我將非常感謝它被標記爲回答。 – Mranz