Czy wie ktoś z Was jak przekonwertować obrazek z **Byte **na String? Pobieram kwerendą wybrany obrazek z bazy danych i chcę go przesłać po TCP/IP. Pomyślałem, że najlepiej będzie przesłać go jako string i później dowolnym językiem przekonwertować go z powrotem z **Stringa **na Byte. P.S. Używam Turbo Delphi.

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
To może base64?
https://flixengineering.com/archives/270

- Rejestracja:około 10 lat
- Ostatnio:2 dni
- Lokalizacja:Łódź
- Postów:1402
Tak jak napisał @vpiotr jeśli chcesz trzymać na polu stringa obrazek, to raczej trzeba go jakos zakodowac tak, aby nie mieć później problemów. Więc jakieś kodek typu base64, czy inne uuencode, ewentualnie w postaci heksow (to jeśli są to bardzo małe obrazki. Inne sposoby będą stwarzały tylko problemy.
- Rejestracja:ponad 16 lat
- Ostatnio:prawie 7 lat
Ok, rozumiem. A czy ma już ktoś z Was kod przesyłający obrazek z bazy danych jako dane binarne? (sorki, że pytam tak bezpośrednio)

- Rejestracja:ponad 16 lat
- Ostatnio:prawie 7 lat
Robię tak i fajnie bo przesyła mi Base64, ale podczas dekodowania obrazek się nie wyświetla. Tak jakby mi ucinało cześć kodu obrazka.
AdoQuery1.SQL.Add('SELECT image FROM imagesDB WHERE image_id = ''' + img_id + ''';');
AdoQuery1.Open;
while not AdoQuery1.eof do
begin
image := encodeBase64Data(AdoQuery1.FieldByname('image').AsWideString);
ShowMessage(image);
- Rejestracja:ponad 14 lat
- Ostatnio:około 2 godziny
@diron16:
nic nie rozumiem , piszesz o przesyłaniu zdjęcia przy pomocy socketów a wklejasz bazodanowy kod
EDT
ShowMessage(image)
nie pokaże obrazka
- Rejestracja:ponad 16 lat
- Ostatnio:prawie 7 lat
Aby wszystko było zrozumiałe:
Mamy, dajmy na to, 3 obrazki w bazie danych.
Wybieram z listy komentarz i wybieram obrazek:
komentarz: "Skocz do sklepu i kup bułki."
obrazek: "bułki"
Za pomocą tych dwóch parametrów leci zapytanie do bazy danych i pobiera kod binarny obrazka oraz jakiś większy tekst niż ten z listy np. "Skocz do sklepy i kup bułki grahamki z nasionami oraz coś tam coś tam". Mając już wszystko chcę wysłać to po TCP/IP do kolegi w sali, która jest daaaaaaaaleko :)
ShowMessage(Image); wiem że nie wyświetli obrazka, bo ma wyświetlić string obrazka, który wiem jak przesłać po TCP/I, ale taki string to bardzo dużo znaków i długo leci, więc poprosiłem Was o pomoc jak można to usprawnić, aby przesyłanie obrazka było szybsze.
Proszę pamiętać, że kolega ma w swoim pokoju odbiór tych danych w aplikacji w C# i wysyła do mnie odpowiedź też poprzez tą aplikację lub dowolną inną w innym języku.
- Rejestracja:ponad 14 lat
- Ostatnio:około 2 godziny
tutaj masz błąd
AdoQuery1.FieldByname('image').AsWideString
próbujesz pobrać z bazy dane binarne jako WideString
.
zobacz tutaj:
https://stackoverflow.com/questions/11773986/how-to-insert-image-into-database-using-tadoquery-component-only
EDT:
pisane z głowy ...
var
field: TBlobField;
stream: TMemoryStream;
imageString:ansistring;
begin
///
field := TBlobField(ADOQuery.FieldByName('Image'));
stream := ADOQuery.CreateBlobStream(Field, bmRead);
imageString:=EncodeBase64(stream.Memory, Stream.Size);
///
end;
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.