Питання # 4 076 ... аток delphi! Мені доводиться відображати jpeg-зображення через комп ... (робота з

Привіт шановні знавці Delphi!

Мені доводиться відображати JPEG-зображення через компонент типу TImage (як підкладку для нехитрого ручного векторизатора). В принципі, все вже працює, н оя несподівано зіткнувся з тим, що не можу отримати абсолютний розмір JPEG-зображення в сантиметрах (витягти з надр TImage дозвіл в "пікселях на що-небудь" або абсолютний розмір пікселя поки теж не виходить).

Підкажіть будь ласка як вирішити цю проблему.

З вдячністю всім хто відповість,
Віталій

Міні-форум питання

Для цього потрібно дізнатися дозвіл екрана (пікс / дюйм) по вертикалі і горизонталі для поточного монітора. Це робиться за допомогою функції GetDeviceCaps ().

Роблю Лаби і курсачі по Delphi і Turbo Pascal. За ПИВО! Пишіть в личку, а краще в аську. А ще краще - телефонуйте в скайп!

Спробував зробити так, як радив min @ y ™. однак наступний фрагмент коду видає для монітора нульові дозволу і по вертикалі, і по горизонталі.
Теж саме виходить, якщо запитувати дозвіл робочого столу.
Я щось не так роблю?

Галочка "підтвердження прочитання" - вселенське зло.

За порадою Вадим До змінив код так
і, відповідно, так
Як і раніше повертаються нулі. У циклі я переконався, що обидва оператори присвоювання дійсно виконуються. Може бути я саме "хендл" пристрою неправильно підставляю?

Згадав, що можна спробувати Monitors [i] .PixelsPerlnch
як видно з назви - єто кількість точок на дюйм. Пам'ятаючи, що дюйм це 25.4 мм, можна легко перейти до метричної системи.

Галочка "підтвердження прочитання" - вселенське зло.

За порадою Вадим До змінив код так
(Властивість PixelsPerlnch визначено в класі TScreen і відсутній в класі TMonitor). З урахуванням цієї поправки, - дійсно працює, однак абсолютний розмір зображення визначається невірно.

Точніше, у такий спосіб я отримую дозвіл екрана (96), а у властивостях JPEG-файлу вказано дозвіл 300 пікселів на дюйм (то ж показує і PhotoShop).

ну чому люди придумують "спрощення" свого питання.
Ну не треба цього робити. І не будете отримувати "невірних відповідей".

Скажімо так, при відображенні картинки, вона може відображатися як піксель до пікселя, так і з урахуванням дозволу, зазначеного всередині файлу. у класу TJPEGImage є властивість dpi, яке і повинно показати Вам довгоочікувані 300.


У bmp файлу таке поняття як dpi відсутня, а при завантаженні з jpg файлу воно втрачається. (Точніше воно може бути використано для масштабування картинки при завантаженні).

Галочка "підтвердження прочитання" - вселенське зло.

Вадим До написав: ну чому люди придумують "спрощення" свого питання.

Я в початковому варіанті питання питав як отримати абсолютний розмір зображення в яких нибудь одиницях або в пікселях на якусь абсолютну одиницю. Ймовірно, я щось неправильно сформулював, але, на жаль, до сих стать не розумію що.

Змінив код так
З'ясувалося, що присвоєний Image.Picture.Graphic об'єкт класу TJPEGImage не має властивості dpi, що, можливо, пов'язано з особливостями Delphi-7, якою я користуюся.

Може бути можна отримати якісь інші параметри і на їх основі обчислити цей?

У картинки, намальовані на екрані немає розміру всередині. Його можна спробувати порахувати, якщо знати розмір в пікселях і параметри монітора.

У картинки, збереженої у файлі такий параметр може бути. Але в деяких випадках він безглуздий. Чому? Ну наприклад картинка відсканована, тут можна зрозуміти, тут dpi має сенс. А ось у фотографії виду з вікна він вже не маємо сенсу, так як не можна провести відповідність (трішки подумавши, зрозумієте чому). Але ось в разі фотографії Землі з космосу вже може мати сенс.

hResol: = (Image.Picture.Graphic as TJPEGImage) .dpi;

Уважно читаємо мій попередній пост, де розповідається, чому це не буде працювати.

Галочка "підтвердження прочитання" - вселенське зло.

Якщо я правильно зрозумів думку Вадим К. після присвоєння JPEG-картинки Image.Picture.Graphic один раз відбувається її перетворення, вихідні параметри якого потім губляться (не зберігається в надрах примірника компонента типу TImage).

Однак до цієї "просунутої" проблеми я просто не дійшов. Ось змінений код, який з цієї точки зору коректний.
Він спотикається рівно там же, де і колишній код
В обох випадках на стадії компіляції мені просто повідомляється, що властивість dpi не визначене.

З приводу властивості dpi - у мене немає зараз під рукою Делфі. може я і помилився - все пам'ятати не можу. Але хіба складно натиснути точку після jpeg і подивитися список властивостей?


Не пишіть так. Це витік пам'яті. використовуйте assign

Галочка "підтвердження прочитання" - вселенське зло.