1
我正在努力解決以下問題:我用紅色繪製了一張小圖片。此顏色必須更改爲其他顏色(用戶選擇)。我用MSDN和一些谷歌上搜索做了以下內容:Vb.net改變圖片的顏色
Private Function GetPicture(Iterator As Integer, tempfile As String) As String
Dim Rstring = ""
If Colors.Count = 0 OrElse Iterator >= Colors.Count Then
Rstring = tempfile
Else
Dim NewPicture = My.Computer.FileSystem.GetTempFileName()
My.Computer.FileSystem.CopyFile(tempfile, NewPicture, True)
Dim mypict = New Bitmap(NewPicture)
Dim ColorList As New List(Of Color)
For x = 0 To mypict.Width - 1
For y = 0 To mypict.Height - 1
Dim mypixel = mypict.GetPixel(x, y)
If ColorList.Contains(mypixel) = False Then
ColorList.Add(mypixel)
End If
Next
Next
Dim NewColor = Color.FromArgb(255, 0, 0, 255)
Dim ListOfColorMaps As New List(Of ColorMap)
For Each elem In ColorList
Dim newcolormap = New ColorMap
newcolormap.OldColor = elem
newcolormap.NewColor = NewColor
ListOfColorMaps.Add(newcolormap)
Next
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = mypict.Width
Dim height As Integer = mypict.Height
Dim colorMap As New ColorMap()
'colorMap.OldColor = Color.FromArgb(255, 0, 0, 0) ' opaque red
'colorMap.NewColor = Color.FromArgb(255, 0, 0, 255) ' opaque blue
Dim remapTable As ColorMap() = ListOfColorMaps.ToArray
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap)
Dim tempBmp = New Bitmap(width, height)
Dim g = Graphics.FromImage(tempBmp)
g.DrawImage(tempBmp, New Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel, imageAttributes)
g.Save()
g.Dispose()
mypict.Dispose()
Dim NewFileName = NewPicture.Remove(NewPicture.IndexOf("."c) - 1) & ".png"
tempBmp.Save(NewFileName, Imaging.ImageFormat.Png)
My.Computer.FileSystem.DeleteFile(NewPicture)
tempBmp.Dispose()
Rstring = NewPicture
End If
Return Rstring
代碼運行沒有異常,似乎找到所需顏色,但保存tempbmp不包含任何圖片。發生這種情況是因爲代碼在沒有圖形的dll中運行?
你幾乎可以忽略「IF」部分 - 這與另一個用例有關。
的問候和誠摯的感謝 基督教紹爾
謝謝,這個伎倆! 我仍然困惑爲什麼你需要tempbmp - 我會猜到你可以從mypict創建g然後繪製它... –
當你從位圖創建一個'Graphics'時,你對該對象所做的任何事情都被繪製到您從中創建'Graphics'對象的位圖。所以如果你想繪製到'tempBmp',請執行'Graphics.FromImage(tempBmp)';如果你想繪製「mypict」,請執行'Graphics.FromImage(mypict)'。任何使用'g'繪製的東西都會顯示在您創建圖形對象的圖像上。 –
啊,非常感謝! –