Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Windows 7 Fotoanzeige Workaround (https://www.delphipraxis.net/206316-windows-7-fotoanzeige-workaround.html)

Moombas 9. Dez 2020 06:59

Windows 7 Fotoanzeige Workaround
 
Moin zusammen,

ich möchte mich einem aktuellen Problem widmen, brauche da aber eure Erfahrung, evtl. hat schon jemand eine Lösung die er teilen mag, man muss das Rad ja nicht neu erfinden.

Problematik: Ab Android 10 werden die Bilder, die in Apps (mit der Kamera) gemacht und komprimiert werden, leider für die Windows Fotoanzeige in windows 7 (und ggf. darunter) nicht mehr angezeigt (nur das Vorschaubild bei der Datei) und es gibt eine leicht irreführende Fehlermeldung:

"Das Bild kann nicht angezeigt werden, da möglicherweise nicht genügend Arbeitsspeicher zur Verfügung steht. Schließen sie nicht verwendete Programme, oder geben sie Festplattenspeicher frei (wenn die Festplatte fast voll ist). Versuchen sie es anschließend erneut."

Wir haben dazu leider keine Lösung innerhalb von Windows 7 gefunden und wollten ein anderes Programm als die Fotoanzeige verwenden. Diese bieten leider viel zu viele Funktionen (die Standard Fotoanzeige war hierfür ideal).

Idee ist nun das in Delphi quasi selber nachzubauen (das TImage zeigt das Bild korrekt an), leider habe ich keine Ahnung wie Windows die Dateiinformation weitergibt, wenn man das Programm als "Standardprogramm" für Bilder hinterlegt hat.
Von anderen Sachen wie "Bild drehen" etc. will ich erst mal noch gar nicht reden :(
Oder ich speicher es einfach als bmp und öffne es dann in der Fotoanzeige (also als Middleware), das geht auch.

Aber dafür muss ich wissen, wie Windows die Dateiinformation übergibt (Parameter?).

jaenicke 9. Dez 2020 08:02

AW: Windows 7 Fotoanzeige Workaround
 
Zitat:

Zitat von Moombas (Beitrag 1478790)
Problematik: Ab Android 10 werden die Bilder, die in Apps (mit der Kamera) gemacht und komprimiert werden, leider für die Windows Fotoanzeige in windows 7 (und ggf. darunter) nicht mehr angezeigt

Es geht hier um das neue HEIC Format, das dank Anlehnung an den H.265 Codec deutlich besser komprimieren kann und zusätzlich noch deutlich mehr kann.
Unter Windows 10 kam die Unterstützung glaube ich 2018.
Das uralte Windows 7 hat natürlich kein solches Funktionsupdate mehr bekommen.

Delphi selbst kann das Format auch nicht lesen, wenn das Betriebssystem es nicht kann. Unter Windows 10 kann man die Imaging-Routinen von Windows dafür nutzen.

Es bleibt daher entweder nicht nur bei Android sondern auch bei Windows auf eine neue Version zu wechseln oder Drittanbieterlösungen wie diese auszuprobieren:
https://www.copytrans.de/copytransheic/

Zitat:

Zitat von Moombas (Beitrag 1478790)
Aber dafür muss ich wissen, wie Windows die Dateiinformation übergibt (Parameter?).

Der Dateiname wird einfach im ersten Parameter übergeben.

Moombas 9. Dez 2020 09:08

AW: Windows 7 Fotoanzeige Workaround
 
Danke @ jaenicke. Ich war mir dessen nicht so sicher :)

Für den, den es interessiert hier der Code, jedoch für Lazarus:
Delphi-Quellcode:
unit Middleware;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, LCLIntf, Windows;

type

  { TFotoviewerMiddleware }

  TFotoviewerMiddleware = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private

  public

  end;

var
  FotoviewerMiddleware: TFotoviewerMiddleware;

implementation

{$R *.lfm}

{ TFotoviewerMiddleware }

procedure TFotoviewerMiddleware.FormCreate(Sender: TObject);
var
  Filename : WideString;
begin
  Application.ShowMainForm := false;
  if ParamStr(1) <> '' then
  begin
    Image1.Picture.LoadFromFile(ParamStr(1));
    Filename := Widestring(Extractfilename(ParamStr(1)));
    Filename := Widestring(LeftStr(Filename, Length(Filename) - 3));
    Filename := Widestring('C:\temp\' + Filename + 'bmp');
    Image1.Picture.SaveToFile(Filename);
    OpenDocument(Filename);
    ShellexecuteW(Handle, 'open', PWideChar(Filename), PWideChar(''), nil, SW_MAXIMIZE);
  end;
  Application.Terminate;
end;

end.
Geht sicherlich auch schöner ohne Form etc. aber das sollte bis zur Umstellung auf W10 reichen.

Moombas 9. Dez 2020 09:27

AW: Windows 7 Fotoanzeige Workaround
 
Hat sich erledigt :)

jaenicke 9. Dez 2020 10:10

AW: Windows 7 Fotoanzeige Workaround
 
Den Dateinamen kannst du auch einfach mit ChangeFileExt ändern, sowohl bei Delphi als auch bei Lazarus.

Lazarus kann HEIC? Oder das ist doch kein HEIC, sondern irgendetwas anderes. Denn mit dem Picture.SaveToFile wird ja auch normalerweise nichts konvertiert nur weil der Dateiname anders ist, sondern nur im aktuellen Format neu gespeichert.

Egal, die Hauptsache ist ja, dass es funktioniert. Denn für Windows 7 lohnen sich ja keine großen Untersuchungen mehr.

Moombas 9. Dez 2020 11:42

AW: Windows 7 Fotoanzeige Workaround
 
Nein, zumal auch eine Umstellung auf W10 mehr oder weniger im Gange ist.
Weißt du (oder von mir aus auch jemand anders) wie ich den Registry Key für die Standard Programme richtig ändere?

...
habs auf einem Testsystem mal manuell gesetzt, er setzt dann folgende Werte, das werde ich dann per Script auch setzen und hoffen das es klappt :)

HKEY_CLASSES_ROOT\Applications\*.exe\shell\open\co mmand\ (Standard) "c:\custom\*.exe" "%1"
HKEY_USERS\SSID\Software\Classes\Applications\*.ex e\shell\open\command\ (Standard) "c:\custom\*.exe" "%1"
HKEY_USERS\SSID\Software\Microsoft\Currentversion\ Explorer\FileExts\.jpg\UserChoice ProgId REG_SZ Applications\*.exe
HKEY_USERS\SSID_Classes\Applications\*.exe\shell\o pen\command\ (Standard) "c:\custom\*.exe" "%1"

jaenicke 9. Dez 2020 16:19

AW: Windows 7 Fotoanzeige Workaround
 
Es sollte unter Windows 7 genügen folgende Werte anzuschauen:
Code:
HKEY_CLASSES_ROOT\.jpg
--> unter dem Standardwert steht etwas wie jpegfile
Dann suchst du diesen Wert unter CLASSES_ROOT, z.B.:
HKEY_CLASSES_ROOT\jpegfile
Dort kannst du nun unter shell\open\command\ (Standard) deine Anwendung eintragen.

Wichtig:
Hier hat sich ab Vista viel geändert, weil Programme diese Änderung oft ohne Zustimmung des Benutzers gemacht haben. Unter Windows 10 wird immer nach einer Registrierung eines neuen Programms für einen Dateityp der Benutzer gefragt, wenn er das nächste Mal eine solche Datei öffnen möchte.

Moombas 10. Dez 2020 14:19

AW: Windows 7 Fotoanzeige Workaround
 
Hallo jaenicke,

danke für den Input, wir werden das nur bei den W7 Rechnern ändern, da das Problem bei W10 ja nicht besteht.
Ich test gerade noch die Registry zu ändern, da ich das aber mit einem AutoIt Script mache, wollte ich euch hier damit nicht behelligen ;)

Aber geholfen hast du mir dennoch schon sehr.

jaenicke 10. Dez 2020 14:22

AW: Windows 7 Fotoanzeige Workaround
 
Zitat:

Zitat von Moombas (Beitrag 1478857)
Ich test gerade noch die Registry zu ändern, da ich das aber mit einem AutoIt Script mache, wollte ich euch hier damit nicht behelligen ;)

Aus der Registry den Eintrag exportieren, dann einfach mit dem Befehl reg (und entsprechenden Rechten natürlich) importieren:
Code:
reg import blub.reg

Redeemer 10. Dez 2020 16:45

AW: Windows 7 Fotoanzeige Workaround
 
Wir können jetzt noch paar Seiten um den heißen Brei drum rum reden. Daher jetzt mal Butter bei die Fische: Welche Erweiterung und mal den Anfang der Datei mit HxD ansehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz