Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 5
1

Не выводит корректно изображение

04.03.2014, 21:54. Показов 557. Ответов 0
Метки нет (Все метки)

Есть программа считывания монохромного BMP файла. Не правильно выводит изображение на экран. Не могу понять.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
using System.IO;
using System.Drawing;
 
namespace cosLab1
{
    /// <summary>
    /// Логика взаимодействия для Window1.xaml
    /// </summary>
    /// 
    public class MyBMP
    {
        public struct FileHeader 
        {
            public Int16 FileType;      /* Тип файла, всегда 4D42h ("BM") */
            public Int32 FileSize;      /* Размер файла в байтах */
            public Int16 Reservedl;     /* Всегда 0 */
            public Int16 Reserved2;     /* Всегда 0 */
            public Int32 BitmapOffset; /* Начало данных изображения (в байтах) */ 
        };
 
        public struct BitmapHeader
        {
            public Int32 Size;          /* Размер заголовка в байтах */
            public Int32 Width;         /* Ширина изображения в пикселях */
            public Int32 Height;        /* Высота изображения в пикселях */
            public Int16 Planes;         /* Количество цветовых плоскостей */
            public Int16 BitsPerPixel;   /* Количество битов на пиксель */ 
            public Int32 Compression;     /* Используемые методы сжатия */ 
            public Int32 SizeOfBitmap;    /* Размер растра в байтах */ 
            public Int32 HorzResolution; /* Горизонтальное разрешение в пикселях на метр*/ 
            public Int32 VertRezolution; /* Вертикальное разрешение в пикселях на метр */ 
            public Int32 ColorsUsed;      /* Количество цветов в изображении */ 
            public Int32 Colorslmportant; /* Минимальное число "важных" цветов */ 
        };
 
        BinaryReader file;
        public FileHeader fileHeader;
        public BitmapHeader bitmapHeader;
        public Bitmap image;
        public MyBMP(string filePath)
        {
            file = new BinaryReader(new StreamReader(filePath).BaseStream);
        }
 
        public void ReadBMP()
        {
            if (file.ReadInt16() != 0x4d42)
                throw new Exception("Not a BMP image");
            fileHeader = new FileHeader()
            {
                FileType = 0x4d42,
                FileSize = file.ReadInt32(),
                Reservedl = file.ReadInt16(),
                Reserved2 = file.ReadInt16(),
                BitmapOffset = file.ReadInt32()
            };
            bitmapHeader = new BitmapHeader()
            {
                Size = file.ReadInt32(),
                Width = file.ReadInt32(),
                Height = file.ReadInt32(),
                Planes = file.ReadInt16(),
                BitsPerPixel = file.ReadInt16(),
                Compression = file.ReadInt32(),
                SizeOfBitmap = file.ReadInt32(),
                HorzResolution = file.ReadInt32(),
                VertRezolution = file.ReadInt32(),
                ColorsUsed = file.ReadInt32(),
                Colorslmportant = file.ReadInt32()
            };
            image = new Bitmap(bitmapHeader.Width, bitmapHeader.Height);
 
            byte[] bitmap = new byte[bitmapHeader.Width*bitmapHeader.Height/8];
            file.Read(bitmap,0,bitmapHeader.Width*bitmapHeader.Height/8);
 
            
            for (int i = bitmapHeader.Height-1; i > 1; i--)
                for (int j = 1; j < bitmapHeader.Width; j++)
                {
                    var eightPixels = bitmap[(j/8)*(bitmapHeader.Height)+(i/8)];
                                                      
                    for(int k=0;k<8;k++)
                    {
                        int point = 255 * ((eightPixels >> (7 - k)) % 2);
                        image.SetPixel(j, i, System.Drawing.Color.FromArgb(point,point,point));
                    }
 
                }
        }
    }
 
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
 
        private void openImage_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openImage = new OpenFileDialog();
            if (openImage.ShowDialog().Value)
            {
                      
                MyBMP image = new MyBMP(openImage.FileName);
                image.ReadBMP();
                fileInfo.AppendText("File:"+openImage.FileName+"\n");
                fileInfo.AppendText("Width:" + image.bitmapHeader.Width + "\n");
                fileInfo.AppendText("Height:" + image.bitmapHeader.Height + "\n");
                fileInfo.AppendText("Colors number:" + image.bitmapHeader.ColorsUsed + "\n");
                image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                                image.image.GetHbitmap(),
                                IntPtr.Zero,
                                System.Windows.Int32Rect.Empty,
                                BitmapSizeOptions.FromWidthAndHeight(image.bitmapHeader.Width, image.bitmapHeader.Height));
            }
        }
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 21:54
Ответы с готовыми решениями:

Не выводит корректно массив
using System; using System.Linq; class Program { private static void Main() ...

Sqlite (Between не корректно выводит данные)
sqlQuery = string.Format(&quot;SELECT * FROM Catalog WHERE( BETWEEN '{1}' AND...

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

Видеокарта через HDMI-VGA переходник выводит некорректное изображение, либо вообще не выводит
История такая: решил прикупить новую видеокарту, выбор пал на MSI GeForce GTX 1060 OCV1. Уже после...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2014, 21:54

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Изображение показывает не корректно
Здравствуйте! Проблема с изображением. Мать asrock b150m-hds, Процесор i5-7600, Видеокарта 1050...

Не корректно выводит на экран
Написана программа в Visual Studio 2013, которая строит кроссворд, а если не возможно то выводит...

Не корректно выводит сообщения
Здравствуйте! Маленький такой вопросик: если некоторые поля не заполнены выдавать соответствующее...

Не выводит корректно цену
есть сайт http://www.park-mbl.ru/katalog/matrasyi/, если через админку задавать цену 9000 например...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.