网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月03日漏签0天
vb吧 关注:156,056贴子:1,166,187
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 8回复贴,共1页
<<返回vb吧
>0< 加载中...

修改以下程序。请教。

  • 只看楼主
  • 收藏

  • 回复
  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我不知道怎么修改成picture1内的实现魔术棒功能,并且能保存所选区域,API能看懂一些,但组合应用实在不会。请教各位大神了。帮帮忙。
以下程序来源于网络。尊重版权,附链接地址。
'用vb实现魔术棒功能
' 获得图象的像素高和宽
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
'创建兼容DC的函数
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
'为DC选择图象的函数
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
'清除DC的函数
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
'获得图象像素值的函数
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
'设置图象像素值的函数
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
'给GetObject函数使用的结构
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Dim i As Long, j As Long
Dim A() As Byte
Dim R0 As Long '当前色
Dim G0 As Long
Dim B0 As Long
Dim r As Long, g As Long, b As Long
Dim gap As Long
Dim Mybmp As BITMAP
Dim Pic1 As IPictureDisp
'把图片放如DC设备
Dim myDc As Long
'//把颜色整数值变为R,G,B///
Private Sub Hex2RGB(ByVal HexColor As String, Red As Long, Green As Long, Blue As Long)
HexColor = Space(6 - Len(HexColor)) + HexColor
Red = Val("&H" & Left(HexColor, 2))
Green = Val("&H" & Mid(HexColor, 3, 2))
Blue = Val("&H" & Right(HexColor, 2))
End Sub
'颜色比对//
Private Function colorDiffer(x As Long, y As Long) As Boolean
Hex2RGB Hex(GetPixel(myDc, x, y)), r, g, b
If Abs(r - R0) < gap And Abs(g - G0) < gap And Abs(b - B0) < gap Then
colorDiffer = False
Else
colorDiffer = True
End If
End Function
'
'//寻找边界的过程/
Sub FindVerge(x As Long, y As Long)
On Error Resume Next
Print
Do
If colorDiffer(x - 1, y) Or x = 0 Then
Exit Sub
Else
x = x - 1
End If
Loop
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Public Sub FindFigure(ByVal x As Long, ByVal y As Long)
On Error Resume Next
If colorDiffer(x + 1, y) Or _
colorDiffer(x + 1, y + 1) Or _
colorDiffer(x + 1, y - 1) Or _
colorDiffer(x, y + 1) Or _
colorDiffer(x, y - 1) Or _
colorDiffer(x - 1, y) Or _
colorDiffer(x - 1, y + 1) Or _
colorDiffer(x - 1, y - 1) Then
A(x, y) = 1
PSet (x, y), vbGreen
If colorDiffer(x, y + 1) Or A(x, y + 1) = 1 Then
Else
FindFigure x, y + 1
End If
If colorDiffer(x - 1, y) Or A(x - 1, y) = 1 Then
Else
FindFigure x - 1, y
End If
If colorDiffer(x, y - 1) Or A(x, y - 1) = 1 Then
Else
FindFigure x, y - 1
End If
If colorDiffer(x + 1, y) Or A(x + 1, y) = 1 Then
Else
FindFigure x + 1, y
End If
End If
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub Form_Load()
Me.ScaleMode = 3
MsgBox "鼠标左键是魔术棒,鼠标右键设置容差"
Dim str1 As String
str1 = "D:\我的文档\Desktop\新建文件夹 (5)\1307624844XCQ7HQVc.jpg"
gap = 70 '设置容差值
'初始化
ChDir App.Path
On Error GoTo Z:
Set Pic1 = LoadPicture(str1)
GetObject Pic1, Len(Mybmp), Mybmp
myDc = CreateCompatibleDC(0)
SelectObject myDc, Pic1
ReDim A(Mybmp.bmWidth - 1, Mybmp.bmHeight - 1)
Exit Sub
Z:
str1 = InputBox("请输入一张图片的路径及文件名. 比如:c:mypicturephoto1.bmp")
Resume Next
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 1 Then
Cls
BitBlt Form1.hdc, 0, 0, Form1.Height, Form1.Width, myDc, 0, 0, vbSrcCopy
Dim x1 As Long, y1 As Long
Dim tep
x1 = CLng(x): y1 = CLng(y)
Hex2RGB Hex(GetPixel(myDc, x1, y1)), R0, G0, B0
Debug.Print "kai" & R0
Debug.Print G0
Debug.Print B0
Dim t As Single
FindVerge x1, y1
FindFigure x1, y1
ReDim A(Mybmp.bmWidth - 1, Mybmp.bmHeight - 1)
Else
gap = Val(InputBox("请输入容差值(0~200)"))
End If
End Sub
Private Sub Form_Paint()
BitBlt Form1.hdc, 0, 0, Form1.Height, Form1.Width, myDc, 0, 0, vbSrcCopy
End Sub
'Print
'————————————————
'版权声明:本文为CSDN博主 qiu5208 的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明
'原文链接:https://blog.csdn.net/qiu5208/article/details/2200111


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本人不是计算机科班的,纯属业余爱好。浅薄的知识见笑了。


2026-01-03 09:48:55
广告
不感兴趣
开通SVIP免广告
  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@ 云霞散人,cbm666等大神。


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我的目的是分割出方框内绿色线包围的细胞,并且保存为一个图片。


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请各位改造一下。谢谢。


  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为了图片,ps足以,为了算法.....在下告辞


  • 橡皮树
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//定义选区矩形边界
dim mL,mT,mR,mB as integer
......
Private Sub Form_MouseDown(......)
If Button = 1 Then
mL=x,mT=y,mR=x,mB=y
......
end sub
Public Sub FindFigure(ByVal x As Long, ByVal y As Long)
On Error Resume Next
If colorDiffer(x + 1, y) Or _
colorDiffer(x + 1, y + 1) Or _
colorDiffer(x + 1, y - 1) Or _
colorDiffer(x, y + 1) Or _
colorDiffer(x, y - 1) Or _
colorDiffer(x - 1, y) Or _
colorDiffer(x - 1, y + 1) Or _
colorDiffer(x - 1, y - 1) Then
if x<mL then mL=x
if x>mR then mR=x
if y<mT then mT=y
if y>mB then mB=y
......
随手写的,只是提供一个思路,不一定对


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢各位。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回vb吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示