ورود

View Full Version : یک سوال درباره تصویر و متغییر



سعید قدیری مقدم
یک شنبه 25 مرداد 1383, 17:53 عصر
سلام دوستان :)
من یک برنامه می خوام بنویسم به شکل زیر



Private Sub Command1_Click()
picdata = Picture1.Picture
End Sub

Private Sub Picture2_Click()
Picture2.Picture = picdata
End Sub



که هروقت رو دکمه 1 کلیک کردم تصویر داخل متغییر picdata ذخیره بشه بعد هر وقت رو دکمه 2 کلیک کردم تصویر از متغییر فرا خوانی بشه

در حقیقت یک حافظه مجازی می خوام برای نگهداشتن تصویر و فراخوانی اون
من نمیخوام از clipboard استفاده کنم.و یا اینکه تصویر رو تو یک فایل با عنوان tmp نگهداری کنم. اگه ممکن هست من رو راهنمایی کنید :)

AminSobati
یک شنبه 25 مرداد 1383, 19:28 عصر
سلام دوست عزیز،
کافیه شما یک متغیر از جنس StdPicture تعریف کنین، بعد به عنوان واسطه ازش استفاده کنین. البته اگر جنس متغیر رو معرفی نکنین، به صورت پیش فرض Variant در نظر گرفته میشه که باز هم کار شما رو انجام میده.


Dim tmpPic As StdPicture
Set tmpPic = Picture1
Picture2 = tmpPic

در اینجا فرض کردیم Picture1 و Picture2 هر دو PictureBox هستن.
موفق باشین،
امین ثباتی MCSD

سعید قدیری مقدم
دوشنبه 26 مرداد 1383, 11:37 صبح
:) سلام
آقا قربون دست ممنون

AminSobati
دوشنبه 26 مرداد 1383, 11:46 صبح
:)

سعید قدیری مقدم
سه شنبه 27 مرداد 1383, 17:12 عصر
یک سوال دیگه :roll:
آیا میشه تصویر داخل یک همچین متغییری یا عکس درون یک picture رو بصورت باینری داخل یک متغیر string و یا متغییر byte ذخیره کرد؟
من می خوام به کمک متغییر تصویر رو جابجا کنم :roll:

AminSobati
چهارشنبه 28 مرداد 1383, 09:21 صبح
سعید جان،
بین کجا و کجا جابجا کنی؟ وقتی تصویرت در متغیر باشه حتی بین COM Objectها هم میتونی این کار رو انجام بدی.
ممکنه بیشتر توضیح بدین

سعید قدیری مقدم
چهارشنبه 28 مرداد 1383, 22:11 عصر
راستشو بخوایی من می خوام برنامه ای بنویسم که از وب کم عکس بگیره بعد این عکس رو به کمک winsock به یک کامپیوتر دیگه ارسال کنه.
البته ocx پیدا کردم که مربوط به وب کم هست ولی نمی خوام با ocx کارمو انجام بدم
برای اینکار باید طی یک زمان مشخص از وب کم عکس گرفته بشه و این عکس به picturebox منتقل میشه حالا من می خوام عکس داخل این picture box مستقیما ارسال بشه و داخل picture box طرف مقابل دیده بشه.
خوب مشکل اینجاست که winsock فقط اطلاعات string و یا مشابه اون رو ارسال میکنه. :roll:

من یک راه به نظرم رسید اون هم اینکه عکس داخل picturbox رو با دستور savepicture ذخیره کنم بعد عکس رو ارسال کنم بعد توطرف مقابل عکس رو داخل picturbox لود کنم. اما این روش یک مشکل بزرگ داره
اولا اینکه عکس بصورت bmp ذخیره میشه بنابرین عکسبرداری و بعد ذخیره سازی تو هارد دیسک و ارسال فایل بصورت همزمان زمان بر هست و سیستم تقریبا از کار میافته یعنی سیستم کند میشه :(

بخاطر این دنبال روشی میگردم که عکس رو وارد یک متغییر کنم و مستقیما متغییر رو ارسال کنم تا این مشکل پیش نیاد اما نمیدونم یک عکس رو چطور میتونم وارد یک متغییر کنم البته از نوع string یا binary یا متغییری که با winsock قابل شناسایی باشه :|

AminSobati
چهارشنبه 28 مرداد 1383, 23:45 عصر
سعید جان در کدی که براتون نوشتم شما در حقیقت اطلاعات باینتری فایل تصویر رو به داخل متغیر میبرین. WinSock این قابلیت رو داره که اطلاعات رو به فرمت غیر از String هم دریافت کنه. من در MSDN مطالب متنوعی در این مورد دیدم:


Knowledge Base

HOWTO: Send and Receive UDT's Using the Winsock ControlPSS ID Number: Q152058

Article Last Modified on 11-8-2001


--------------------------------------------------------------------------------
The information in this article applies to:

Microsoft Visual Basic Standard Edition, 32-bit, for Windows 4.0
Microsoft Visual Basic Professional Edition, 32-bit, for Windows 4.0
Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows 4.0
Microsoft Internet ActiveX Controls 1.0

--------------------------------------------------------------------------------


Summary
The Winsock control methods SendData and GetData send and receive data through an argument declared of type variant. The following variant types are supported:

Byte vbByte
Integer vbInteger
Long vbLong
Single vbSingle
Double vbDouble
Currency vbCurrency
Date vbDate
Boolean vbBoolean
SCODE vbError
String vbString
Byte Array vbArray + vbByte
Because user-defined types are not directly supported, you must make use of the byte-array data type in order to pass a user-defined type with the Winsock control. This article demonstrates how to send and receive data contained in a user-defined type with the Winsock Control.



More Information
The example uses the Winsock TCP client and server created in the following Microsoft Knowledge Base article:

Q152057 HOWTO: Create & Use a Client/Server Using Winsock TCP Controls
Prior to following this example, make sure you have at least built the framework for the client and server discussed in the aforementioned article. You will be required to make modifications to the DataArrival Event subroutine and the SendData Command subroutine.
Step by Step Example
Enter the following code in the General declarations section of Form1 of both the client and server:

Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (_
hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

Private Type MyType
i As Integer
l As Long
s As String * 8
d As Double
End Type



Enter the following code for the DataArrival Event subroutine in the Winsock server:

Private Sub TCP1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim vta
Dim mt As MyType
Dim bt() As Byte
TCP1(Index).GetData vta, vbArray + vbByte, LenB(mt)
bt = vta
CopyMemory mt, bt(0), LenB(mt)
Debug.Print mt.i; ","; mt.l; ","; mt.s; ","; mt.d
End Sub



Enter the following code for the SendData Command button in the Winsock client:
Private Sub cmdSendData_Click()
Dim mt As MyType
mt.i = 99
mt.l = 33
mt.s = "abcd"
mt.d = 23.76
Dim bt() As Byte
ReDim bt(LenB(mt)) as Byte
Dim vtdata As Variant
CopyMemory bt(0), mt, LenB(mt)
vtdata = bt
TCP1.SendData vtdata
End Sub




Additional query words:

Keywords: kbnetwork kbAPI kbSDKPlatform kbVBp400 kbWinsock kbGrpDSNet
Issue Type:
Technology: kbVBSearch kbAudDeveloper kbZNotKeyword kbActiveXICSearch kbVB400Search kbVB400 kbActiveXIC



--------------------------------------------------------------------------------

Send feedback to Microsoft

© 2002 Microsoft Corporation. All rights reserved.


و اما کد:


Open "D:\MyPic.jpg" For Binary As #1
Dim str1 As String
str1 = Space(FileLen("D:\MyPic.jpg"))
Get #1, , str1
Close #1
Open "D:\D:\MyNewPic.jpg" For Binary As #1
Put #1, , str1
Close #1


امیدوارم در حد یک سر نخ کوچیک کمکت کنه!
موفق باشین،
امین ثباتی MCSD

سعید قدیری مقدم
پنج شنبه 29 مرداد 1383, 00:04 صبح
دوست عزیز من که گفتم استفاده از فایل حالا به هر صورت مشکل زا هست و من نمیخوام تصویر ذخیره بشه تو هارد و با این کدی که شما نوشتید باید اول تصویر تو هارد ذخیره بشه بعد توسط کد شما فراخوانی شده به متغییر وارد بشه :roll: من میخوام مستقیما تصویر از picturbox به یک متغییر منتقل بشه :|

برای انتقال تصویر از picturebox به یک متغییر چه راحی وجود داره؟ :|

سعید قدیری مقدم
شنبه 31 مرداد 1383, 14:06 عصر
:( کسی نمیتونه به من کمک کنه؟

AminSobati
شنبه 31 مرداد 1383, 19:14 عصر
سعید جان من اگر جای شما باشم روی DCOM وقت بیشتری صرف میکنم تا winsock. اگر چه DCOM نکات ظریف و خاص خودش رو داره، اما دستتون به مراتب بازتره برای نوشتن چنین نرم افزاری.

سعید قدیری مقدم
شنبه 31 مرداد 1383, 23:21 عصر
میشه درباره Dcom یک خورده بیشتر توضیح بدی؟

AminSobati
یک شنبه 01 شهریور 1383, 01:21 صبح
تا به حال ActiveX DLL درست کردین؟

سعید قدیری مقدم
یک شنبه 01 شهریور 1383, 01:33 صبح
ocx اره اما dll نه
میشه یک خوره همچین بیشتر توضیح بدی؟