Member 9720862 Ответов: 1

System. byte [] проблема в 64 битах для изображения


Я должен отобразить изображение в crystal report. Для этого
Я должен назначить изображение в наборе данных, поэтому я должен использовать typeof(System.Байт[]).
это будет хорошо работать в 32-битной системе, но не работает в 64-битной системе.

Ниже приведен код, который я использую...
так что же такое решение для 64-битной системы, чтобы работать...?

Что я уже пробовал:

открытые статические устанавливает раскрывающееся меню документе(документе sReport, инт ReportIndex, Имяотчета строку, строку продуктам)
{
пробовать
{
FileStream FilStr = new FileStream(ImagePath, FileMode. Open);
BinaryReader BinRed = новый BinaryReader(FilStr);
DataSet DsImages = новый набор данных();
DataTable ImageTable = новый DataTable ("img");
// ImageTable.Столбцы.Add (new DataColumn ("path", typeof(string)));
Можно себе представить.Столбцы.Add (new DataColumn ("img", typeof(System.Байт[])));
DsImages.Таблицы.Добавить (ImageTable);
DataRow dr = DsImages.Таблицы ["img"].Невров();
//dr ["path"] = ImagePath;
//Преобразовать.ToBase64String(imgBytes)
dr ["img"] = Convert. FromBase64String(конвертировать.ToBase64String(BinRed.ReadBytes((инт)BinRed.BaseStream.Длина)));
DsImages.Столы["ИМГ"].Строк.Добавить(д-р);
FilStr.Рядом();
BinRed.Рядом();
//sReport.База данных.Таблицы[1].SetDataSource(DsImages.Таблицы ["изображения"]);

sReport.Subreports[ReportIndex]. SetDataSource(DsImages.Таблицы[0]);

возвращение sReport;
}
поймать (исключение бывший)
{
Ящик для сообщений.Show ("Ошибка В: Программе.Устанавливает раскрывающееся меню() \н\н" + экс.Сообщение);

возвращение sReport;
}
}

Richard MacCutchan

Почему вы преобразуете байты в строку только для того, чтобы преобразовать их обратно в байты? Это неизбежно вызовет проблемы. Просто считайте байты из исходного файла изображения и не связывайтесь с ними.

1 Ответов

Рейтинг:
0

OriginalGriff

Если вам нужны байты в вашей таблице, то просто сделайте это:

public static ReportDocument SetImage(ReportDocument sReport, int ReportIndex, string ReportName, string ImagePath)
    {
    try
        {
        DataTable imageTable = new DataTable("img");
        imageTable.Columns.Add(new DataColumn("img", typeof(System.Byte[])));
        DataRow dr = imageTable.NewRow();
        dr["img"] = File.ReadAllByes(ImagePath);
        imageTable.Rows.Add(dr);
        sReport.Subreports[ReportIndex].SetDataSource(imageTable); 
        return sReport;
        }
    catch (Exception Ex)
        {
        MessageBox.Show("Error At : Program.SetImage() \n\n" + Ex.Message);
        return sReport;
        }
    }


Member 9720862

да, я знаю это.. но этот код будет работать только для 32-битной, но не работает в 64-битной системе...

OriginalGriff

Тогда это не ошибка этого кода - это что-то другое в вашей системе. Байты-это байты независимо от размера системы, они фиксированы на восемь бит. Скорее всего, это 32-битная DLL, к которой вы обращаетесь: вы не можете "переключать" размеры в приложении midd, это не работает.

Какую ошибку вы получаете?