Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
2-1296806882
Alex_C
2011-02-04 11:08
2011.05.08
Как jpg показать на Canvas


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


15-1295815945
Кто б сомневался
2011-01-23 23:52
2011.05.08
Запустить программу с пониженными правами из программы с админ пр


15-1296121492
Джек
2011-01-27 12:44
2011.05.08
Сайты


15-1295641340
Интересующийся
2011-01-21 23:22
2011.05.08
Жаль что у вас нет раздела для сишников




   Наверх