十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
為什么 BitBlt 第二第三參數(shù)是200,這是繪制到位圖上的坐標起點,一般是0。如果繪制寬度和坐標起點不能使位圖全覆蓋上,留出的空白部分自然為黑色的。
成都創(chuàng)新互聯(lián)公司專注于高安企業(yè)網(wǎng)站建設,響應式網(wǎng)站,商城網(wǎng)站開發(fā)。高安網(wǎng)站建設公司,為高安等地區(qū)提供建站服務。全流程定制開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
假如下面那樣,沒見有黑邊:
hBMP = CreateCompatibleBitmap(hDC, 500,600)
hBMPOld = SelectObject(hMDC, hBMP)
BitBlt(hMDC,0,0, 500, 600, hDC, 0, 0, HCC0020)
hBMP = SelectObject(hMDC, hBMPOld)
去除黑邊現(xiàn)象的辦法:
1)在做圖像坐標映射反查的時候,算出當前點在原始圖像的外部還是內(nèi)部,若在外部,判斷當前像素點的X或者Y位置,找臨近四個邊界的像
素值代替;
該方法太過繁瑣,適合自己寫程序?qū)崿F(xiàn),如若想調(diào)用現(xiàn)有的一些庫函數(shù),可以考慮2)做法:
2)將待旋轉(zhuǎn)的圖像進行邊界填充,最不濟的情況下可以擴充為原始圖像的大??;
旋轉(zhuǎn)邊界填充圖像;
計算原始圖像經(jīng)過旋轉(zhuǎn)以后的結(jié)果圖像的尺寸大??;
在邊界填充旋轉(zhuǎn)圖像上截取目標圖像;(圖像都是按照圖像中心旋轉(zhuǎn)的);
附上一段matlab人臉根據(jù)人眼位置對齊的代碼:
[plain] view plain copy
eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的傾斜角度
if eye_angle 0
eye_angle = eye_angle + 360;
end
if floor(eye_angle) = 5 || floor( 360 - eye_angle ) = 5
continue;
end % 5度之內(nèi)不做對齊操作
img = imread(img_path);
[m,n,~] = size(img);
img_pad = padarray(img,[m n],'both','replicate');% 擴充圖像
img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋轉(zhuǎn)擴充圖像
[m_pad_r,n_pad_r,~] = size(img_pad_rotate);
[plain] view plain copy
eye_angle = eye_angle * pi / 180;
f_cos = cos(eye_angle);f_sin = sin(eye_angle);
new_m = floor(m * abs(f_cos) + n * abs(f_sin));
new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最終對齊圖像的大小
left = floor((n_pad_r - new_n) / 2);right = left + new_n;
bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;
face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目標圖像
figure,imshow(face_rorate)
這問題有點籠統(tǒng),軟糖來說說把:
圖像處理由System.Drawing命名空間負責。
主要是Bitmap類和Graphics類。
Bitmap表示一個位圖,可以是BMP,JPG,PNG等文件。
裝載位圖
Dim?位圖?As?Bitmap?=?Bitmap.FromFile("C:\Image1.PNG")
Graphics表示一張畫紙,能夠進行繪制操作。
它可以被窗體、控件、位圖調(diào)用CreateGraphics()方法來創(chuàng)建。
然后調(diào)用Graphics.Draw開頭的一系列函數(shù)來繪制圖像和圖形,F(xiàn)ill開頭的填充圖形。
創(chuàng)建畫紙并繪制位圖
Dim?畫紙?As?Graphics?=?Me.CreateGraphics()
畫紙.DrawImage(位圖,?100,?100,?256,?256)
可以將上面三行放到Form1_Load中測試,把路徑改一下,
還可以把Me改為能在上面繪圖的控件的名稱。
更多內(nèi)容請看MSDN的System.Drawing命名空間。
如滿意,請采納,謝謝。