Главная страница
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.006 c
2-1296592407
Тимоха111
2011-02-01 23:33
2011.05.08
ошибка AV при получении динамического массива из длл


2-1296232735
bagos
2011-01-28 19:38
2011.05.08
Передача данных между программами


15-1294777603
Verter_Alice
2011-01-11 23:26
2011.05.08
Метод слежки с помощью куков


1-1253459740
нубский вопрос :(
2009-09-20 19:15
2011.05.08
Динамически изменяемый хинт в трее


1-1253695891
Игорь
2009-09-23 12:51
2011.05.08
Как правильно передать из DLL?