話說又過了好幾天沒有寫網誌了
這次分享一個我之前遇過的問題
想想看,要怎麼把左圖變成右圖?

(IE 6之前的瀏覽器,看png圖可能有問題,像是背景變灰)

最近在做PM,因為覺得畫面表現不好
所以特地去找了PM的背向圖
結果發現他的圖都是把PM置中
但是因為Picturebox的位置是固定的(不固定也可,麻煩)
所以就變成圖型有一半是簍空狀
比較好的解決方式就是把圖片的空白去掉,下移成右圖樣子
可是如果要用PhotoImpact一張張下移的話
總共移493張我一定會瘋掉

你猜我最後怎麼解決?

我決定用VB.NET試寫一個程式

其實我對VB.NET的GDI繪圖不是很熟悉
只依稀記得可以用SexPixel的方式描點
但這個方式其實還蠻原始的
不過我實際寫過之後,發現其實並不會很難

因為這個程式碼不長也不難,這次就直接公佈原始碼吧

Dim num As Integer

For num = 1 To 493
    Label1.Text = "正在轉換第" & num & "筆"
    Application.DoEvents()
    Dim bmp As New Bitmap("D:\Henry\My Documents\BSPM\修改前\" & num.ToString("000") & ".png")
    Dim i, j As Integer

    Do
        j = 0
        For i = 0 To bmp.Width - 1
            If bmp.GetPixel(i, 79).Name.ToString = "ffffff" Then
                j += 1
            End If
        Next
        If j = bmp.Width Then
            For i = 0 To bmp.Width - 1
                For j = bmp.Height - 1 To 1 Step -1
                    bmp.SetPixel(i, j, bmp.GetPixel(i, j - 1))
                Next
            Next
        Else
            Exit Do
        End If
    Loop

    bmp.Save("D:\Henry\My Documents\BSPM\修改過\" & num.ToString("000") & ".png", Drawing.Imaging.ImageFormat.Png)
Next
MessageBox.Show("完成")

看不懂啊?看不懂我也沒辦法(攤手)

....

不要丟東西啦,好啦我稍微解釋一下
首先我是先把圖片給讀進bitmap裡面
然後先判斷最下面一行是不是都是白色(ffffff)
如果都是白色的話,就從最下面開始,依序將上面的那個點複製過來
為什麼不是從上面開始呢?因為我們是要把圖案下移
如果從上面開始放的話,下一個像素的色彩就會被蓋掉了
然後設個Do Loop,當檢查出最下一排不是都白色的時候才跳出
最後記得要把bmp給存出去,記得要設定存出去的格式喔

整段程式碼只有短短30行不到,不過卻對我幫助很大
這個程式跑起來只花了兩分鐘就解決我本來要花幾十個小時的問題
不過記得不要用偵錯模式跑,速度會慢很多
因為偵錯模式會加入很多程式碼,拖慢你的速度

其實VB.NET並沒有自己想像的那麼難
有些事情不去做,永遠不知道結果


------
本日分享歌曲  涼宮春日插曲 - God Knows


最近Pixnet的維修次數變多了
有點擔心他會變成下一個無恥小站...

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蕭雲 的頭像
    蕭雲

    正因為活著

    蕭雲 發表在 痞客邦 留言(2) 人氣()