PDA

View Full Version : سوال: مشکل با خواندن یک عکس از رجیستری



BORHAN TEC
دوشنبه 17 آبان 1389, 12:41 عصر
سلام:قلب:

من با استفاده از کد زیر یک فایل png را در رجیستری ذخیره کرده ام.

procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
Reg := TRegistry.Create;
try
Reg.OpenKey('Software\Fava', True);
Reg.WriteBinaryData('ICO', MyStream, MyStream.Size);
MyStream.LoadFromFile('d:\clock.png');
finally
Reg.Free;
MyStream.Free;
end;
end;
کد بالا به درستی کار می کند و مشکلی هم ندارد.
از کد زیر هم می خواهم برای خواندن عکس و قرار دادن آن در یک کنترل Image استفاده کنم که این کد با مشکل مواجه می شود:

procedure TForm1.Button2Click(Sender: TObject);
var
Reg: TRegistry;
MyStream: TMemoryStream;
Buf: array of byte;
I: Integer;
begin
MyStream := TMemoryStream.Create;
Reg := TRegistry.Create;
try
Reg.OpenKey('Software\Fava', True);
SetLength(Buf, Reg.GetDataSize('ICO'));
Reg.ReadBinaryData('ICO', PByte(Buf)^, Reg.GetDataSize('ICO'));
MyStream.Write(Buf, SizeOf(Buf));
MyStream.Position := 0;
Image2.Picture.Bitmap.LoadFromStream(MyStream);
finally
Reg.Free;
MyStream.Free;
end;
end;
به نظر شما مشکل از کجاست؟ :متفکر:

با تشکر... :قلب:

مهران رسا
دوشنبه 17 آبان 1389, 12:47 عصر
کد بالا به درستی کار می کند و مشکلی هم ندارد.
وقتی هنوز موفق به خوندن فایل از رجیستری نشدید چطوری میفرمایید مشکلی نداره ؟

BORHAN TEC
دوشنبه 17 آبان 1389, 13:00 عصر
وقتی هنوز موفق به خوندن فایل از رجیستری نشدید چطوری میفرمایید مشکلی نداره ؟
به رجیستری رفتم و دیدم که فایل ذخیره شده.

مهران رسا
دوشنبه 17 آبان 1389, 13:18 عصر
به رجیستری رفتم و دیدم که فایل ذخیره شده.
خب مطمئن هستید فایل به صورت کامل و بدون مشکل ذخیره میشه ؟ و ضمناً در زمان بارگزاری فایل چه خطایی دریافت میکنید ؟ (خطا مربوط به چه قسمتی هست ؟)

BORHAN TEC
دوشنبه 17 آبان 1389, 13:24 عصر
خب مطمئن هستید فایل به صورت کامل و بدون مشکل ذخیره میشه ؟ و ضمناً در زمان بارگزاری فایل چه خطایی دریافت میکنید ؟ (خطا مربوط به چه قسمتی هست ؟)
با خطای Stream Read Error مواجه میشم. در ضمن محلی که خطا رخ میده نامشخص است(شاید بخاطر اینکه خطا از طرف یکی از فایلهای کتابخانه ای ویندوز صادر می شود.). در ضمن با اطمینان بالای 90% حدس می زنم که اطلاعات درست ذخیره شده است، چون موقعی که از Reg.GetDataSize('ICO') استفاده میکنم مقدار برگشتی برابر با اندازه فایل است.

vcldeveloper
دوشنبه 17 آبان 1389, 18:27 عصر
کد نوشتن در رجیستری تون که مشکل داره؛ وقتی هنوز فایل رو در Stream لود نکردید، چی رو در رجیستری نوشتید؟! LoadFromFile رو که بعد از WriteBinaryData فراخوانی کردید! از طرف دیگه، MyStream رو برای چی به WriteBinaryData پاس دادید؟! باید یا از TMemoryStream.Memory استفاده می کردید، یا بعد از لود کردن فایل در Stream، اون رو در یک بافر می ریختید، و بافر رو به WriteBinaryData پاس می کردید.



با خطای Stream Read Error مواجه میشم. در ضمن محلی که خطا رخ میده نامشخص است(شاید بخاطر اینکه خطا از طرف یکی از فایلهای کتابخانه ای ویندوز صادر می شود.).به خاطر اینکه use debug .dcus رو در تنظیمات پروژه فعال نکردید، تا دیباگر داخل فایل های rtl دلفی step کنه.