代碼畫筆
㈠ 新手請教:這個是C#畫圖的代碼,不過使畫筆,畫刷什麼的老是出錯
flag++; //進行修改
if (MyDrawType != 0 && MyDrawType != 6 && MyDrawType != 7)
{
step++;
if (step == 1)
{
MyStartPos.X = e.X; //記錄起點
MyStartPos.Y = e.Y;
step++;
}
if (step == 3)
{
MyEndPos.X = e.X; //記錄終點
MyEndPos.Y = e.Y;
}
}
if (MyDrawType == 6) //畫曲線
{
step = 0;
this.Points.Add(new Point(e.X, e.Y)); //記錄當前點
this.temppoint.Add(new Point(e.X, e.Y)); //記錄臨時點
}
if (MyDrawType == 7)
{
if (e.X > this.chooseboxLeft && e.Y > this.chooseboxTop && e.X < (this.chooseboxLeft + this.chooseboxWidth) && e.Y < (this.chooseboxTop + this.chooseboxHeight))
{//移動選擇框
step = 1;
this.pictureBox1.Image = bmp;//刷新圖像
MyStartPos.X = e.X;
MyStartPos.Y = e.Y;
}
}
if (MyEditType != 0)
{
flag++;
if (MyEditType == 1)
{
bmp = (Bitmap)this.pictureBox1.Image;
for (int i = e.X + 10; i < e.X + 23; i++)
for (int j = e.Y + 10; j < e.Y + 23; j++)
{
bmp.SetPixel(i, j, this.Back); //用背景色著色,實現橡皮擦功能
}
this.pictureBox1.Image = bmp;
step = 1;
}
if (MyEditType == 2)
{
bmp = (Bitmap)this.pictureBox1.Image;
bmp.SetPixel(e.X + 5, e.Y + 5, this.Fore); //畫筆
this.pictureBox1.Image = bmp;
step = 1;
}
if (MyEditType == 5)
{
bmp = (Bitmap)this.pictureBox1.Image;
for (int i = e.X + 10; i < e.X + 23; i++)
for (int j = e.Y + 10; j < e.Y + 23; j++) //畫刷
{
bmp.SetPixel(i, j, this.Fore);
}
this.pictureBox1.Image = bmp;
step = 1;
}
}
}
㈡ 代碼HPEN red_pen=createPen(PS_SOLID,1,RGB(255,0,0))的涵義是什麼
CPen::CreatePen
BOOL CreatePen( int nPenStyle, int nWidth, COLORREF cfColor );
BOOL CreatePen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );
返回值:如果成功則返回非零值或邏輯畫筆的句柄;否則返回0。
參數: nPenStyle 指定畫筆的風格。其可能取值的列表,請參見CPen構造函數中的nPenStyle參數。
nWidth 指定畫筆的寬度。
· 對於CreatePen的第一個版本來說,如果這個值為0,則不管是什麼映射模式,以設備單位表示的寬度總是一個像素。
· 對於CreatePen的第二個版本,如果nPenStyle是PS_GEOMETRIC,則寬度以邏輯單位給出。如果nPenStyle是PS_COSMETIC,則寬度必須設置為1。
crColor 包含畫筆的一個RGB顏色。
pLogBrush 指向一個LOGBRUSH結構。如果nPenStyle是PS_COSMETIC,則此LOGBRUSH結構的lbColor成員指定畫筆的顏色,此LOGBRUSH結構的lbStyle成員必須設置為BS_SOLED。如果nPenStyle為PS_GEOMETRIC,則此結構的所有成員都必須用於指定畫筆畫刷屬性。
nStyleCount 指定lpStyle數組的長度(以雙字為單位)。如果nPenStyle不是PS_USERSTYLE,這個值必須是零。
lpStyle 指向一個雙字值的數組。第一個值指定一個用戶定義的風格中第一段虛線的長度,第二個值指定第一段空白的長度,如此等等。如果nPenStyle不是PS_USERSTYLE,則這個指針必須為NULL。
說明:
CreatePen的第一個版本用指定的風格、寬度和顏色來初始化一支畫筆。此畫筆以後可選作為任何設備環境的當前畫筆。
寬度大於1個像素的畫筆總是具有PS_NULL,PS_SOLED或PS_INSIDEFRAME風格。
如果畫筆具有PS_INSIDEFRAME風格和某一不匹配邏輯調色板中顏色的顏色,則此畫筆用一個混合色來進行繪制。PS_SOLID畫筆風格不能用一個混合色來創建一支畫筆。當畫筆的寬度小於或等於1時,PS_INSIDEFRAME風格等同於PS_SOLID風格。
CreatePen的第二個版本初始化一支具有指定的風格、寬度和刷子屬性的邏輯裝飾畫筆或幾何畫筆。一支裝飾畫筆的寬度總是1;幾何畫筆的寬度總是由世界單位指定。當應用程序創建了一支邏輯畫筆之後,它可通過調用CDC::SelectObject函數來將此畫筆選入一個設備環境中。當一支畫筆被選入一個設備環境之後,它就可以用於畫直線或曲線。
· 如果nPenStyle為PS_COSMETIC和PS_USERSTYLE,則lpStyle數組中的項指定風格單位中虛線和空白的長度。一個風格單位由使用此畫筆畫線的設備定義。
· 如果nPenStyle為PS_GEOMETRIC和PS_USERSTYLE,則lpStyle數組中的項指定虛線和空白的長度(用邏輯單位表示)。
· 如果nPenStyle為PS_ALTERNATE,則忽略風格單位而交替設置像素。
當一個應用程序不再需要一支給定的畫筆時,它將調用CGdiObject::DeleteObject成員函數或銷毀CPen對象,以使資源不再使用。當一支畫筆被選入一個設備環境後,應用程序就不能刪除這支畫筆了。
RGB(255,0,0):表示顏色值,這里是紅色,R(red)G(green)B(blue),三個分量,對應的值范圍都是0~255。.
1:是畫筆的寬度,這里是1個像素那麼寬
PS_SOLID:畫筆風格,不能用一個混合色來創建一支畫筆
㈢ c++中選擇畫筆的問題。代碼CClientDC d(this); CPen pen(0,0,RGB(255,0,0));
SelectObject的返回值就是原來的畫筆。看看MSDN。
㈣ C++應用程序中,畫圖程序 創建畫筆的代碼 急~~
要想在MFC中畫出有顏色的線條,首先就要設置DC的畫筆,我們可以按如下方法來設置畫筆:
第一步:在View類中添加一個COLORREF類型的數據成員m_Color(用來保存畫筆顏色值),在構造函數中對其初始化,
m_Color(RGB(255,0,0))
第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP消息的處理函數OnLButtonDown和OnLButtonUp中添加如下代碼:
void CdrView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_StartPoint=point; //用來保存畫線起始點的位置,即滑鼠左鍵第一次按下時的位置,類型為CPoint
CView::OnLButtonDown(nFlags, point);
}
void CdrView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//第一種方法,用HDC繪圖,使用API函數設置畫筆顏色
/*HDC hdc;
hdc=::GetDC(m_hWnd);
::SelectObject(hdc,CreatePen(PS_SOLID,1,m_Color)); //向設備上下文(設備描述表)中插入由CreatePen函數創建的畫筆
::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL);
::LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
//第二種,用CDC類繪圖,使用CPen類構造畫筆
/*CDC aDC;
CPen pen(PS_SOLID,1,m_Color); //建立一個畫筆類對象,構造時設置畫筆屬性
aDC.m_hDC=::GetDC(m_hWnd);
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
::ReleaseDC(m_hWnd,aDC.m_hDC);*/
//第三種,用CClient類繪圖,使用CPen類構造畫筆,跟第二種方法不同的是用CClientDC時不用手動去獲取DC,和釋放DC
CClientDC aDC(this); //CClientDC的構造函數需要一個參數,這個參數是指向繪圖窗口的指針,我們用this指針就可以了
CPen pen(PS_SOLID,1,m_Color); ////建立一個畫筆類對象,構造時設置畫筆屬性
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
void CdrView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
}
運行程序,就可以畫出紅色的線條來,如果想畫其它顏色,只需要設置m_Color的值即可,例如,要設置成綠色,可以在View類的構造函數處把m_Color(RGB(255,0,0))改寫成m_Color(RGB(0,255,0))。顏色的改變是通過設置RGB(0,255,0)中的三個參數來實現的。RGB中的三個參數分別對應三原色的紅、綠、藍,每一個參數的取值范圍都是0~255,通過不同數值的組合,就可以畫出各種各樣的顏色來了。
㈤ C#用畫筆繪圖時,如何用代碼獲取當前畫筆的坐標值(即當前的X,Y)
MousePosition就是當前坐標,是一個Point類型(X=MousePosition.X,Y=MousePosition.Y)。
㈥ flash中,怎麼做一個畫筆工具代碼
畫筆一:幀-動作:
this.createEmptyMovieClip("canvas_mc", 999);
var
isDrawing:Boolean = false;
//
clear_btn.onRelease = function()
{
canvas_mc.clear();
};
//
var mouseListener:Object = new
Object();
mouseListener.onMouseDown = function() {
canvas_mc.lineStyle(5,
0xFF0000, 100);
canvas_mc.moveTo(_xmouse, _ymouse);
isDrawing =
true;
};
mouseListener.onMouseMove = function() {
if (isDrawing)
{
canvas_mc.lineTo(_xmouse,
_ymouse);
updateAfterEvent();
}
};
mouseListener.onMouseUp =
function() {
isDrawing =
false;
};
Mouse.addListener(mouseListener);
建一個清除按鈕,實例名:clear_btn。
——————————————————————————————————————————————
畫筆二:
幀-動作:
var
empiremue = new
ContextMenu();
//刪除原始菜單狀態!
empiremue.hideBuiltInItems();
//自定義菜單項目!
empiremue.customItems.push(new
ContextMenuItem("滑鼠寫字", h1));
empiremue.customItems.push(new
ContextMenuItem("清除字跡", h2));
empiremue.customItems.push(new
ContextMenuItem("退出程序", h3,true));
empiremue.customItems.push(new
ContextMenuItem("退出寫字", h4));
function h3()
{
fscommand("quit");
}
function h4()
{
Mouse.show();//顯示滑鼠
_root.clear();
//_root.pen=false;
_root.onMouseMove=function(){
updateAfterEvent();
pen._x
= _root._xmouse+1200;
pen._y = _root._ymouse+800;
}}
function h1()
{
stop();
//_root.mc._visible=false;//影片不可見
var
xx=Math.random()*0xFFFFFF;
//Mouse.show();//顯示滑鼠
_root.createEmptyMovieClip("pen",
1);
pen.lineStyle(4, 0x0082FF);
pen._x = 200;
pen._y = 200;
//淺蘭色筆體
pen.beginFill(0x0082FF, 100);
pen.lineTo(20, -8);
pen.lineTo(65, -8);
pen.lineTo(65, 8);
pen.lineTo(20, 8);
pen.lineTo(20, -8);
pen.beginFill(0x0082FF, 100);
endFill(pen);
pen.beginFill(xx,
100);
pen.lineStyle(4, xx)
pen.lineTo(0, 0);
pen.lineTo(20, 8);
pen.lineTo(20, -8);
endFill(pen);
pen._rotation = -50;
Mouse.hide();
//定義onMouseDown函數
//Math.random()*0xFFFFFF用代替可使每筆的顏色不同
_root.onMouseDown=function(){
//設定線條樣式
_root.lineStyle(4,xx,100);
//繪制直線;
_root.moveTo(_root._xmouse,_root._ymouse);
//定義變數isdrawing,並賦值為真
isdrawing=true;
}
_root.onMouseMove=function(){
updateAfterEvent();
pen._x
= _root._xmouse;
pen._y =
_root._ymouse;
//如果變數為真
if(isdrawing==true){
//繪制直線斷
_root.lineTo(_root._xmouse,_root._ymouse);
//刷新畫面;
updateAfterEvent();
}
}
_root.onMouseUp=function(){
//設定變數isdrawing的值為假
isdrawing=false;
}
}
function
h2() {
Mouse.hide();
_root.clear();
}
_root.menu = empiremue;
畫筆三:用滑鼠畫線
onMouseDown=function ()
{
lineStyle(2,0*000000,100)
lineTo(_xmouse,_ymouse)
}
onMouseMove = function() {
if (a)
{
lineStyle(2,0x000000,100);//指定線條的粗度為2,顏色為黑色,透明度為100;
lineTo(_xmouse,
_ymouse); //畫線至滑鼠所在位置;
}
updateAfterEvent(); //強制刷新;Flash
強制進行顯示刷新工作。該語句不依賴於時間幀的觸發。
};
onMouseDown = function() {
a = true;
//滑鼠按下,給a變數賦值true,即執行上面的if後面括弧內的語句,開始畫線;
moveTo(_xmouse,
_ymouse);//重新定位開始點;
};
onMouseUp = function() {
a = false;
//滑鼠松開,給a變數賦值false,不執行上面的if後面括弧內的語句,停止畫線;
};
畫筆四:
*兩點間畫直線
*畫螺旋線
*畫正方形、圓、橢圓
*拋物線
*正弦、餘弦線
使用方法:加到幀中就可
// 畫直線
// / x1, y1: 起點坐標
// x2, y2: 終點坐標
// k是層次
Movieclip.prototype.drawline = function(x1, y1, x2, y2, k) {
this.linestyle(1);
this.moveTo(x1, y1);
this.lineTo(x2, y2);
};
// 從(0,0)到(100,100)畫一條線
_root.createEmptyMovieClip("mc", 10);
mc.drawline(0, 0, 100, 100);
// 畫螺旋線
// w、h為寬和高
// f控制線的長短,用弧度表示
Movieclip.prototype.drawhelix = function(w, h, f) {
for (var i = 0;
i<f; i += 0.05) {
this.lineTo(x=Math.sin(i)*i*w, y=Math.cos(i)*i*h);
this.linestyle(1);
}
};
// 以(100,100)為中心畫螺旋線
_root.createEmptyMovieClip("luo", 1);
with (luo) {
drawhelix(5, 5,
13);
_x += 100;
_y += 100;
}
// 多功能函數,可畫圓,橢圓,正多邊形等
// n為邊數
Movieclip.prototype.drawmany = function(w, h, n) {
f = 2*Math.PI;
for (var i = 0; i<=f/n*(n+1); i += f/n) {
this.lineTo(x=Math.sin(i)*w, y=Math.cos(i)*h);
this.linestyle(1);
}
};
// 畫一正五邊形
_root.createEmptyMovieClip("obian", 2);
with
(obian) {
drawmany(50, 50, 5);
_x += 250;
_y += 100;
//
5為多邊形的邊數,6.3為2pai
}
// 畫一橢圓
_root.createEmptyMovieClip("tuo", 3);
with (tuo) {
drawmany(25, 50, 100);
_x += 400;
_y += 100;
}
// 圓
_root.createEmptyMovieClip("yuan", 4);
with (yuan) {
drawmany(50, 50, 100);
_x += 400;
_y += 300;
}
// 拋物線
Movieclip.prototype.drawparabola = function(l, r, k) {
for (var i = -l;
i<=r; i += 1) {
this.lineTo(x=i, y=k*i*i);
this.linestyle(1);
}
};
// 調用
_root.createEmptyMovieClip("parabola", 100);
with
(parabola) {
drawparabola(50, 50, 0.05);
_x += 200;
_y += 200;
// 頂點坐標
}
// 正弦線,餘弦類似
Movieclip.prototype.drawsin = function(n,
k) {
for (var i = 0; i<=90*n; i += 1) {
this.lineTo(x=i,
y=k*Math.sin(i*Math.PI/180));
this.linestyle(1);
}
};
_root.createEmptyMovieClip("sin", 101);
with (sin) {
drawsin(4, 50);
_x += 200;
_y += 200;
// 頂點坐標
}
Movieclip.prototype.drawwave
= function(w, h) {
for (var i = 0; i<=6.3; i += 0.01) {
this.lineTo(x=w/Math.cos(i), y=h*Math.sin(i)/Math.cos(i));
this.linestyle(1);
}
};
_root.createEmptyMovieClip("wave", 105);
with (wave) {
drawwave(100, 100);
_x += 200;
_y += 200;
//
頂點坐標
}
㈦ 請教:C#怎樣實現畫筆功能
usingSystem.Drawing;
privatevoidButton1_Click(objectsender,EventArgse)
{
Brushb=newSolidBrush(Color.Red);
Graphicsg=this.CreateGraphics();
g.FillRectangle(b,50,50,200,200);//在(50,50)繪制寬200高200的紅色矩形
}
上面代碼請先在窗體添加一個Button1,然後雙擊它生成點擊事件。
如滿意,請點贊,謝謝。
㈧ 如何實現在屏幕上畫畫,就是屏幕畫筆之類的。最好有代碼
創建透明窗口及其應用--屏幕畫筆
http://hi..com/qiujiejia/blog/item/5ec37482819e41af6c811991.html
㈨ 使用顏色畫筆代碼如下但沒成功 CPen* pPenRed = new CPen pPenRed->CreatePen(PS_SOLID, 2, RGB(255,0,0))
沒有包含頭文件。
是不是忘加了include <stdafx.h>
㈩ 請java高手幫忙不程序,只要幫我在我的程序中加個改變畫筆粗細和顏色的代碼就行,情況緊急
public void paint(Graphics g) {
Stroke stroke=new BasicStroke(10.0f);//設置線寬為10.0
Graphics2D g2d = (Graphics2D) g;// 獲取圖形環境
g2d.setStroke(stroke);
g2d.draw(gp);// 繪制路徑
}
改成這樣的。快。好了,。
顏色的,你自己練練改。道理相同。
加入顏色的是這樣的。
public void paint(Graphics g) {
Stroke stroke=new BasicStroke(10.0f);//設置線寬為3.0
Color c= new Color(100, 10, 10) ;//設置顏色R-G-B值 (褐色)
Graphics2D g2d = (Graphics2D) g;// 獲取圖形環境
g2d.setColor(c);
g2d.setStroke(stroke);
g2d.draw(gp);// 繪制路徑
}
你就替換paint方法就可以了。別的不用改