Привіт шановні знавці 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
Галочка "підтвердження прочитання" - вселенське зло.