Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.08;
Скачать: CL | DM;

Вниз

TOleGraphic изменяет оригинальный размер GIFa?   Найти похожие ветки 

 
miox ©   (2008-05-28 07:44) [0]

Вот уже долгое время бьюсь над проблемой - надеюсь здесь мне помогут.

Мспользую TOleGraphic для загрузки в TImage изображений формата gif и jpg. Вот таким вот методом.

var
infs : TMemoryStream;//
s:string;
w,h,r : integer;
picture : TOleGraphic;
bitmap:TBitmap;
begin
   picture := TOleGraphic.create;
   bitmap:=TBitmap.Create;
   try
     infs:=TMemoryStream.Create;
     infs.Clear ;
     infs.LoadFromFile(filepic);
     picture.LoadFromStream(штfs);
     bitmap.Width:=picture.Width;
     bitmap.Height:=picture.Height;
     StatusBar1.Panels[0].Text := p.W="+InttoSTr(picture.Width) + " p.H="+InttoSTr(picture.Height);
     bitmap.Canvas.Draw(0, 0, picture);
     Image1.Picture.Bitmap := bitmap;
   finally
     FreeAndNil(picture);
     FreeAndNil(bitmap);
     infs.Free;
   end;
end;

По какой то причине размер изображения загруженый из потока в picture меньше примерно на 20% (по свойствам hight/width и визуально также заметно) чем оригинальное изображение. В результате изображение несколько искажается да и вообще мне надо чтоб выводилось оригинальное.
Пробовал сохранять из потока в файл - этот файл нормальный - значит в потоке нормальный размер. Выходит TOleGraphic глючит или что? Может у меня где то ошибка?
Как побороть?

Сторонние компоненты не предлагать это уже напоследок.

Спасибо заранее.
miox


 
Palladin ©   (2008-05-28 15:38) [1]

для jpeg, все работает прекрасно если сделать uses jpeg; для gif, можно выкорчевать модуль из RxLib

а то, что ты привел, явно не то, что на самом деле


 
miox ©   (2008-05-28 15:56) [2]

Palladin, на самом деле работаю с GIF. А с JPEG и родные компоненты винды работают (во всяком случае то что мне нужно это просто отобразить на экране оригинальное изображение).

Кстати доп. информация. Размер выводимой картинки (hight/width) зависит от разрешения экрана. При большом разрешении возможна ситуация когда hight/width загруженной картинки даже больше чем оригинальные размеры. Закономерности не увидел никакой.
Что за фигня!

ЗЫ
Так неохота в winAPI ковырятся. :(


 
Sapersky   (2008-05-28 16:34) [3]

http://delphimaster.net/view/15-1211878733/
Лично я получал размеры так:
   Picture.get_Width(w); Picture.get_Height(h);
   DC := CreateCompatibleDC(0);
   B.bmWidth  := MulDiv(w, GetDeviceCaps(DC, LOGPIXELSX), 2540);
   B.bmHeight := MulDiv(h, GetDeviceCaps(DC, LOGPIXELSY), 2540);
   DeleteDC(DC);
Наверное, CreateCompatibleDC правильнее чем GetDC(0), которая используется в TOleGraphic, во всяком случае, зависимости размера от разрешения не припомню.
Или, как вариант, Picture.get_Handle(hBmp), затем GetObject.

А вообще есть хороший компонент TGifImage.


 
miox ©   (2008-05-29 10:44) [4]

Sapersky, вы правы - так действительно размеры какие надо. Выходит это TOleGraphics кривой?
Чтож бум копаться в winAPI.
Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2011.05.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1295904584
Юрий
2011-01-25 00:29
2011.05.08
С днем рождения ! 25 января 2011 вторник


3-1258364954
DelphiN!
2009-11-16 12:49
2011.05.08
Проверка корректности даты в TSQL


15-1295990985
Юрий
2011-01-26 00:29
2011.05.08
С днем рождения ! 26 января 2011 среда


2-1296293177
Gu
2011-01-29 12:26
2011.05.08
Определить разрядность ОС


2-1295949753
Тимоха111
2011-01-25 13:02
2011.05.08
Захват изображения части окна