473,804 Members | 3,424 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

The fastest way to gray a picture .

1 New Member
Fist ,Add a new class named "CImage",th en copythe following codes and paste to it.


Option Explicit


Private Type BITMAPFILEHEADE R
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type

Private Type BITMAPINFOHEADE R
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type

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

Private Type RGBQUAD
Blue As Byte
Green As Byte
Red As Byte
Reserved As Byte
End Type

Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADE R
bmiColors As RGBQUAD
End Type


Private Const BI_bitfields = 3& '带掩码的
Private Const BI_RGB = 0 '正常
Private Const DIB_RGB_COLORS = 0 '真彩色
Private Const OBJ_BITMAP = 7 '位图对象
Private Const SRCCOPY = &HCC0020 '直接拷贝
Private Const IMAGE_BITMAP = 0 'LoadImage函数的载入 类型,位图
Private Const LR_LOADFROMFILE = &H10 '从文件载入
Private Const LR_CREATEDIBSEC TION = &H2000 '如果指定了IMAGE_BIT MAP,就返回DIBSecti on的句柄,而不是位图 的句柄
Private Const STRETCH_ANDSCAN S = 1 '默认设置。剔除的线段与剩下的 线段进行AND运算。这个模式通 常应用于采用了白色背景的单色位 图
Private Const STRETCH_ORSCANS = 2 '剔除的线段被简单的清除。这个 模式通常用于彩色位 图
Private Const STRETCH_DELETES CANS = 3 '剔除的线段与剩下的线段进行O R运算。这个模式通常应用于采用 了白色背景的单色位 图
Private Const STRETCH_HALFTON E = 4 '目标位图上的像素块被设为源位 图上大致近似的块。这个模式要明 显慢于其他模式

'************** *************** *************** 用于图像方面的相关 API *************** *************** **************

Private Declare Function CreateDIBSectio n Lib "gdi32" (ByVal hdc As Long, lpBitsInfo As BITMAPINFOHEADE R, ByVal wUsage As Long, lpBits As Long, ByVal handle As Long, ByVal dw As Long) As Long
Private Declare Function CreateCompatibl eDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDIBColorTabl e Lib "gdi32" (ByVal hdc As Long, ByVal un1 As Long, ByVal un2 As Long, lpRGBQuad As Any) As Long
Private Declare Function SetDIBColorTabl e Lib "gdi32" (ByVal hdc As Long, ByVal un1 As Long, ByVal un2 As Long, pcRGBQuad As RGBQUAD) As Long

'************** *************** *************** 用于系统输出的相关 API *************** *************** **************

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
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetStretchBltMo de Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetStretchBltMo de Lib "gdi32" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long

'************** *************** *************** 用于内存处理的相关 API *************** *************** **************

Private Const GMEM_FIXED = &H0
Private Const GMEM_ZEROINIT = &H40
Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
Private Declare Function VarPtrArray Lib "msvbvm50" Alias "VarPtr" (Ptr() As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMem ory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long)
Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlMoveMem ory" (dest As Any, ByVal numBytes As Long)


'************** *************** *************** 公共常用的API函 数 *************** *************** **************

Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long


Private mHdc As Long '保存了内存DC
Private mhDib As Long '当前DibSection的句 柄
Private mhOldDib As Long '原始DibSection的句 柄
Private mPtr As Long '当前DibSection的内 存地址
Private mWidthBytes As Long '当前图像的扫描行字 节数
Private mBmpInfo As BITMAPINFOHEADE R '当前图像的文件信息


Private Sub Class_Terminate ()
Destroy
End Sub

Public Property Get Width() As Long
Width = mBmpInfo.biWidt h
End Property

Public Property Get Height() As Long
Height = mBmpInfo.biHeig ht
End Property

Public Property Get hdc() As Long
hdc = mHdc
End Property

Public Property Get DataPtr() As Long
DataPtr = mPtr
End Property

Public Property Get WidthBytes() As Long
WidthBytes = mWidthBytes
End Property




'************** *************** *************** *************** *************** ***************
'** 函 数 名 : CreateDib
'** 输 入 : Width - DIB的宽度
' Height - DIB的高度
' Bits - 位图的位数,默认为 32
'** 输 出 : 返回是否创建成功
'** 功能描述 : 创建新的DIB
'** 开发日期 : 2008-5-19
'** 作 者 : laviewpbt
'** 修改日期 :
'** 版 本 : Version 1.3.1
'************** *************** *************** *************** *************** **************

Private Function CreateDib(ByVal Width As Long, ByVal Height As Long, Optional ByVal Bits As Integer = 32) As Boolean
Dim i As Long
Destroy '销毁以前的DIB
mHdc = CreateCompatibl eDC(0) '创建DIB设备场景
If mHdc <> 0 Then
With mBmpInfo '位图信息头
.biSize = Len(mBmpInfo)
.biPlanes = 1
.biBitCount = Bits
.biWidth = Width
.biHeight = Height
.biCompression = BI_RGB
Select Case Bits '保证每个扫描行必须 是4的倍数
' Case 1
' mWidthBytes = (((.biWidth + 7) \ 8 + 3) And &HFFFFFFFC)
' Case 4
' mWidthBytes = (((.biWidth + 1) \ 2 + 3) And &HFFFFFFFC)
Case 8
mWidthBytes = ((.biWidth + 3) And &HFFFFFFFC)
' Case 16
' mWidthBytes = ((.biWidth * 2 + 3) And &HFFFFFFFC)
' Case 24
' mWidthBytes = ((.biWidth * 3 + 3) And &HFFFFFFFC)
Case 32
mWidthBytes = .biWidth * 4
Case Else
Exit Function
End Select
.biSizeImage = mWidthBytes * .biHeight
End With
mhDib = CreateDIBSectio n(mHdc, mBmpInfo, DIB_RGB_COLORS, mPtr, 0, 0) '创建DIB,mPtr就是指向 这个创建的DIBSECTION 的内存地址
If mhDib <> 0 Then
mhOldDib = SelectObject(mH dc, mhDib) '选入设备场景
If Bits = 8 Then '如果是8位,我们认为它是灰度 图像,建立起调色板
ReDim ColorTable(0 To 255) As RGBQUAD
For i = 0 To 255
ColorTable(i).R ed = i
ColorTable(i).G reen = i
ColorTable(i).B lue = i
Next
SetDIBColorTabl e mHdc, 0, 256, ColorTable(0) '设置调色板数据
End If
CreateDib = True
End If
End If
End Function


Public Function LoadPictureForm File(Filename As String) As Boolean
On Error Resume Next '防止LoadPicture加 载不支持的图片文件或非图片文件 时出错
Dim StdPic As StdPicture
Dim Width As Long, Height As Long
If Dir(Filename) <> "" Then
Set StdPic = LoadPicture(Fil ename)
If Not StdPic Is Nothing Then
Width = ConvertHimetrix 2Pixels(StdPic. Width, True) 'StdPicture宽度中的 单位是Himetr ics
Height = ConvertHimetrix 2Pixels(StdPic. Height, False)
If CreateDib(Width , Height, 32) = True Then '创建一个空白的Di b
StdPic.Render mHdc + 0, 0, 0, Width + 0, Height + 0, 0, StdPic.Height, StdPic.Width, -StdPic.Height, ByVal 0 '类似于BMP的逆序存储,所以 用-StdPic.Height
End If
Set StdPic = Nothing
End If
End If
End Function


Public Function ChangeToGreyMod e() As Boolean
Dim i As Long, j As Long
Dim DataArr(0 To 2) As Byte, pDataArr(0 To 0) As Long
Dim OldArrPtr As Long, OldpArrPtr As Long
Dim DataArrC(0 To 2) As Byte, pDataArrC(0 To 0) As Long
Dim OldArrPtrC As Long, OldpArrPtrC As Long
Dim LineAddBytes As Long
Dim PixelAddBytes As Long, mPtrC As Long
Const Blue As Long = 28
Const Green As Long = 150 '用long可以方便的避免VB 的溢出错误
Const Red As Long = 77
If mHdc <> 0 And mBmpInfo.biBitC ount = 32 Then
MakePoint VarPtrArray(Dat aArr), VarPtrArray(pDa taArr), OldArrPtr, OldpArrPtr '绑定模拟指针
MakePoint VarPtrArray(Dat aArrC), VarPtrArray(pDa taArrC), OldArrPtrC, OldpArrPtrC
mPtrC = GlobalAlloc(GPT R, mBmpInfo.biSize Image)
CopyMemory ByVal mPtrC, ByVal mPtr, mBmpInfo.biSize Image '复制真彩色图像的数据,其实就 是一片连续的内存而 已
If CreateDib(Width , Height, 8) = True Then '新建一个8位位图
pDataArr(0) = mPtr
pDataArrC(0) = mPtrC
LineAddBytes = mWidthBytes - mBmpInfo.biWidt h '保证每个扫描行的宽 度
For i = 1 To mBmpInfo.biHeig ht
For j = 1 To mBmpInfo.biWidt h
DataArr(0) = (DataArrC(0) * Blue + DataArrC(1) * Green + DataArrC(2) * Red) \ 255 '灰度算法
pDataArrC(0) = pDataArrC(0) + 4
pDataArr(0) = pDataArr(0) + 1
Next
pDataArr(0) = pDataArr(0) + LineAddBytes '32位的位图不需要这个
Next
End If
GlobalFree mPtrC '释放分配的内存
FreePoint VarPtrArray(Dat aArr), VarPtrArray(pDa taArr), OldArrPtr, OldpArrPtr
FreePoint VarPtrArray(Dat aArrC), VarPtrArray(pDa taArrC), OldArrPtrC, OldpArrPtrC '取消模拟指针
End If
ChangeToGreyMod e = True
End Function

Public Function OutPut(ByVal OutDC As Long, Optional ByVal x As Long = 0, Optional ByVal y As Long = 0, Optional ByVal Width As Long, Optional ByVal Height As Long, Optional ByVal Srcx As Long = 0, Optional ByVal Srcy As Long = 0, Optional ByVal dwRop As RasterOpConstan ts = vbSrcCopy) As Boolean
If Width = 0 Then Width = mBmpInfo.biWidt h
If Height = 0 Then Height = mBmpInfo.biHeig ht
OutPut = BitBlt(OutDC, x, y, Width, Height, mHdc, Srcx, Srcy, dwRop)
End Function


Public Sub Destroy()
If mHdc <> 0 Then
If mhDib <> 0 Then
SelectObject mHdc, mhOldDib
DeleteObject mhDib
End If
DeleteObject mHdc
mBmpInfo.biBitC ount = 0
mBmpInfo.biWidt h = 0
mBmpInfo.biHeig ht = 0
mBmpInfo.biSize Image = 0
End If
mHdc = 0: mPtr = 0: mWidthBytes = 0
mhDib = 0: mhOldDib = 0:
End Sub


' 将Himetric s转变为 Pixels
Private Function ConvertHimetrix 2Pixels(HiMetri x As Long, Horizontally As Boolean) As Long
If Horizontally Then
ConvertHimetrix 2Pixels = HiMetrix * 1440 / 2540 / Screen.TwipsPer PixelX
Else
ConvertHimetrix 2Pixels = HiMetrix * 1440 / 2540 / Screen.TwipsPer PixelY
End If
End Function


'************** *************** *************** *************** *************** ***************
'** 过 程 名 : MakePoint
'** 输 入 :
'** 功能描述 : 绑定模拟数组
'** 开发日期 : 2007-4-02
'** 作 者 : laviewpbt
'** 修改日期 :
'** 版 本 : Version 1.2.1
'************** *************** *************** *************** *************** **************

Public Sub MakePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByRef OldArrPtr As Long, ByRef OldpArrPtr As Long)
Dim Temp As Long, TempPtr As Long
CopyMemory Temp, ByVal DataArrPtr, 4 '得到DataArrPtr的S AFEARRAY结构的地址
Temp = Temp + 12 '这个指针偏移12个字节后就是 pvData指针
CopyMemory TempPtr, ByVal pDataArrPtr, 4 '得到pDataArrPtr的 SAFEARRAY结构的地址
TempPtr = TempPtr + 12 '这个指针偏移12个字节后就是 pvData指针
CopyMemory OldpArrPtr, ByVal TempPtr, 4 '保存旧地址
CopyMemory ByVal TempPtr, Temp, 4 '使pDataArrPtr指向 DataArrPtr的SAFE ARRAY结构的pvData指 针
CopyMemory OldArrPtr, ByVal Temp, 4 '保存旧地址
End Sub

'************** *************** *************** *************** *************** ***************
'** 过 程 名 : FreePoint
'** 输 入 :
'** 功能描述 : 取消绑定模拟数组
'** 开发日期 : 2007-4-02
'** 作 者 : laviewpbt
'** 修改日期 :
'** 版 本 : Version 1.2.1
'************** *************** *************** *************** *************** **************

Public Sub FreePoint(ByVal DataArrPtr As Long, ByVal pDataArrPtr As Long, ByVal OldArrPtr As Long, ByVal OldpArrPtr As Long)
Dim TempPtr As Long
CopyMemory TempPtr, ByVal DataArrPtr, 4 '得到DataArrPtr的S AFEARRAY结构的地址
CopyMemory ByVal (TempPtr + 12), OldArrPtr, 4 '恢复旧地址
CopyMemory TempPtr, ByVal pDataArrPtr, 4 '得到pDataArrPtr的 SAFEARRAY结构的地址
CopyMemory ByVal (TempPtr + 12), OldpArrPtr, 4 '恢复旧地址
End Sub


'************** *************** *************** *************** *************** ***************
'** 过 程 名 : ChkFileWrite
'** 输 入 : Filename - 文件路径,文件不存 在,返回错误
'** 功能描述 : 判断是否可以写入改 文件
'** 开发日期 : 2007-4-02
'** 作 者 : laviewpbt
'** 修改日期 :
'** 版 本 : Version 1.2.1
'************** *************** *************** *************** *************** **************

Private Function ChkFileWrite(Fi lename As String) As Boolean
Dim FileNum As Long
FileNum = FreeFile
On Error Resume Next
Open Filename For Output As #FileNum
If Err.Number Then
Else
Close #FileNum
ChkFileWrite = True
End If
End Function

Public Function SavePictureToFi le(Filename As String) As Boolean
Dim i As Long, j As Long
Dim FileNumber As Long, ColorTable() As RGBQUAD
Dim BmpInfoHeader As BITMAPFILEHEADE R

If ChkFileWrite(Fi lename) = True And mHdc <> 0 Then '目标文件可写且有数 据可写
BmpInfoHeader.b fType = &H4D42 'BMP文件的标识
If mBmpInfo.biBitC ount = 8 Then '只有biBitCount等于 1、4、8时才有调色 板
BmpInfoHeader.b fOffBits = 54 + 4 * 256 '调色板的大小
ReDim ColorTable(0 To 255) As RGBQUAD
GetDIBColorTabl e mHdc, 0, 256, ColorTable(0)
ElseIf mBmpInfo.biBitC ount = 32 Then
BmpInfoHeader.b fOffBits = 54
End If
BmpInfoHeader.b fSize = BmpInfoHeader.b fOffBits + mBmpInfo.biSize Image '文件大小
FileNumber = FreeFile
Open Filename For Binary As #FileNumber
Put #FileNumber, , BmpInfoHeader 'BMP文件头
Put #FileNumber, , mBmpInfo '位图信息头
If mBmpInfo.biBitC ount = 8 Then Put #FileNumber, , ColorTable '调色板
ReDim DibBytes(1 To mBmpInfo.biSize Image) As Byte
CopyMemory DibBytes(1), ByVal mPtr, mBmpInfo.biSize Image
Put #FileNumber, , DibBytes '位图数据
Close #FileNumber
SavePictureToFi le = True
End If
End Function



Add a new form,and adding codes likes the followings.

Private Sub Form_Load()
Me.AutoRedraw = True
Dim Img As New Cimage
Img.LoadPicture FormFile "c:\2.bmp"
Img.ChangeToGre yMode
Img.OutPut Me.hdc
Me.Refresh
Img.SavePicture ToFile "c:\3.bmp" '看看保存后的图像是 不是8位的
Img.Destroy '记得一定要销毁哦
End Sub
Sep 5 '08 #1
0 1445

Sign in to post your reply or Sign up for a free account.

Similar topics

17
2334
by: DraguVaso | last post by:
Hi, I need to find the FASTEST way to get a string in a Loop, that goes from "a" to "ZZZZZZZZZZZZZZZZZ". So it has to go like this: a b .... z
2
2478
by: Zambo via SQLMonster.com | last post by:
Hi! We have Sql Server 2000 in our server (NT 4). Our database have now about +350.000 rows with information of images. Table have lot of columns including information about image name, keywords, location, price, color mode etc. So our database don?t include the images itself, just a path to the location of every image. Keywords -field have data for example like this: cat,animal,pet,home,child with pet,child. Now our search use Full-Text...
12
5172
by: windandwaves | last post by:
Hi Gurus When I have a query in which I use a small function, e.g.: SELECT A03_FILES.ID, A03_FILES.D, hasvt() AS hsvVT FROM A03_FILES; where HasVT is defined below: --------------------
6
6655
by: Srinivas Rao \(Rbin/eds2\) | last post by:
HI all, Can any one tell me what the term "gray coding" mean in C programming. with regards, K Srinivas
60
49223
by: Julie | last post by:
What is the *fastest* way in .NET to search large on-disk text files (100+ MB) for a given string. The files are unindexed and unsorted, and for the purposes of my immediate requirements, can't be indexed/sorted. I don't want to load the entire file into physical memory, memory-mapped files are ok (and preferred). Speed/performance is a requirement -- the target is to locate the string in 10 seconds or less for a 100 MB file. The...
2
2452
by: Pieter | last post by:
Hi, I'm using a thight integration with Outlook 2003 (with an Exchange server) in my VB.NET (2005) application. Until now I'm using the Outlook Object Model, but it appears to be very slow, and has some problems: - doing a Move changes the ReceivedTime of the MailItem - I can't use RichText in the MailItem.Body (only allows plain text or HTML) - some other stuff like having to use small 'tricks' to show the default signature in an email
1
2453
by: eric_berlin | last post by:
I am writing a multithreaded application that has 6 threads each writing 5 frames per second video bitmaps to a different picture box. I have just found out that only the main UI thread is supposed to interact with Windows Fourms. What is the fastest way to have a non UI thread safely write a bit map to a picture box?
7
6047
by: kebalex | last post by:
Hi, I have an app (written in .NET 2.0) which updates a picturebox according to some user input (a slider control). when the user makes a change i loop through all of the pixels, do a calculation and update the picture. i currently use the GDI SetPixel method on each pixel of the Pictureboxes image. This is proving far to slow, about 1.5 seconds on average. This app needs to display the update as fast as possible. Has anyone got any...
5
2265
by: MC | last post by:
Hi, I have been looking around for a way to apply the filter that grays out a form or div. I found some examples but the code is pretty complex. Any simple ways to gray that out so I can highlight another form or div? Thanks, Mica PS. I looked at several of the 'easy' examples and they did not work when I applied them.
22
2720
by: SETT Programming Contest | last post by:
The SETT Programming Contest: The fastest set<Timplementation Write the fastest set<Timplementation using only standard C++/C. Ideally it should have the same interface like std::set. At least the following methods must be implemented: insert(), find(), begin(), end(), erase(), size(), operator<(), and at least the forward iterator. Here, speed and correctness are the 2 most important factors. Functionally it should behave similar to...
0
9710
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9589
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10593
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10340
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10329
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9163
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
6858
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5527
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4304
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.