Ես խնդիր ունեմ հիշողության արտահոսքի հետ:
Ես ունեմ այս կոդը button_click
-ում.
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim ms As New IO.MemoryStream
Dim bm As New Bitmap("\Application Data\imgs\IMG22.jpg")
bm.Save(ms, Drawing.Imaging.ImageFormat.Jpeg)
End Sub
Այս կոդը լավ է աշխատում, երբ ես աշխատում եմ .exe-ն իմ նոութբուքում (նկատի ունեմ windows7/32bits-ի տակ՝ ամբողջական .net շրջանակով), բայց երբ ես գործարկում եմ հավելվածը WindowsMobile 6.1 սարքում, հավելվածը բացառություն է անում.
SmartDeviceProject22.exe
OutOfMemoryException
at
Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
at
System.Drawing.Image.Save(Stream stream, ImageFormat format)
at
SmartDeviceProject22.Form1.Button3_Click(Object sender, EventArgs e)
at
....
Պատկերի չափը մոտ 200 կբ է, իսկ լայնությունն ու բարձրությունը՝ մոտ 1500 պիքսել: Պատկերի մանրամասները.
- Չափսը՝ 1536x2048
- Հորիզոնական լուծում՝ 72dpi
- Հորիզոնական լուծում՝ 72dpi
- Բիտի խորությունը՝ 24
- Լուծման միավոր՝ 2
- Գույնի ներկայացում: sRGB -
Ցանկացած օգնություն այն իսկապես կգնահատվի:
Փորձում եմ @asawyer-ի կոդը, նույնիսկ հանում եմ ԲՈԼՈՐ կոդը, հղումը և այլն, և խնդիրը պահպանվում է, ենթադրում եմ, որ դա պատկերի լայնության/բարձրության կամ կոմպակտ շրջանակի հետ կապված է:
Որևէ այլ խորհուրդ:
Խնդրի լուծում և բացատրություն Փորձելուց հետո ինչ-որ բան իրական խնդիր էր, դա հիշողության արտահոսք չէր, ինչպես @pdriegen-ն ասաց, որ առկա է հիշողության խնդիր:
Ես փոխում եմ իմ կոդը հետևյալի վրա (և փորձարկվել է բջջային սարքում).
Dim fs As IO.FileStream = IO.File.OpenRead("\Application Data\ryder\IMG23.jpg")
Dim arrb(fs.Length) As Byte
fs.Read(arrb, 0, arrb.Length)
fs.Close()
fs.Dispose()
Եվ վերևի կոդով (ըստ երևույթին) ես ստանում եմ պատկերի բայթ() (զանգված) տվյալների բազայում պահելու համար՝ օգտագործելով dataSet:
Եզրափակելով. բեռնել bitmap օբյեկտը memoryStream-ում, վատ գաղափար: Շատ շնորհակալություն բոլորին, ովքեր ժամանակ են տրամադրում իմ խնդիրը կարդալու համար, և հատկապես նրանց, ովքեր տեղադրում են իրենց պատասխանը:
Լուծում (եթե ձեզ անհրաժեշտ է պատկերը ցուցադրել նկարի վանդակում).
Մի քանի շաբաթ անց սա, հավանաբար, լավագույն (անվճար) լուծումն է՝ կիրառեք ImageHelper, ինչպես բացատրված է այստեղ՝ ImageHelper
թարմացված հղում դեպի ImageHelper https://opennetcf.com/2010/10/13/loading-parts-of-large-images-in-the-compact-framework/
Այս դասը/նմուշը օգտագործում է Drawing NameSpace-ը OpenNetCF-ից (http://www.opennetcf.com/)
Այն հիանալի է աշխատում և լուծում է իմ հիշողության խնդիրները՝ մեծ բիթքարտեզներ հիշողության մեջ բեռնելով, իրականում մենք բեռնում ենք մանրապատկեր, այնպես որ հիշողության չափը զգալիորեն կրճատվում է և խուսափել OutOfMemory բացառության խնդրից:
Chris Tacke-ի մասին Ես պարզապես հասկացա, որ ImageHelper-ի և OpenNetCF-ի համահիմնադիրի մասին գրառման հեղինակն այստեղ է stackoverflow-ում, ահա նրա պրոֆիլը՝ https://stackoverflow.com/users/13154/ctacke
թարմացված հղում https://opennetcf.com/2010/10/13/loading-parts-of-large-images-in-the-compact-framework/