recvezitor
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Мне необходимо кучу файлов превратить в картинку. Если бы они были маленькие, то проблем бы не было, я бы их все считал в память и потом обычным образом записал в картинку. Но мне нужно постепенно добавлять информацию, т.е. надо использовать потоки и все время сливать считанную информацию. Как дорисовать несколько картинок, чтобы каждая новая картинка добавлялась "справа". Все нужно "дорисовывать" в потоке. Сейчас делаю так: Код: private void toolStripMenuItemSaveAllToPictures_Click(object sender, EventArgs e) { FileStream stream = new FileStream(@"C:\test.jpg", FileMode.Create, FileAccess.ReadWrite); foreach (FileDescriber fd in fileDescribers) { if (fd.Name != "All") { //stream.Position = stream.Length; LoadSingleDataFileToMemory(fd); ParseToStream(stream, fd); // stream.Flush(); //хз надо или не надо? } } stream.Close(); } private void ParseToStream(Stream inputStream, FileDescriber describer) { if (describer != null) { using (Bitmap bmp = new Bitmap(describer.FrameSize, describer.ImpulseCount, PixelFormat.Format24bppRgb)) { Rectangle rect = new Rectangle(Point.Empty, bmp.Size); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat); try { IntPtr ptr = bmpData.Scan0; int bytes = bmpData.Stride * bmpData.Height; byte[] rgbValues = new byte[bytes]; int offset = 0; Color selectedColor = Color.Black; for (int y = 0; y < bmp.Height; y++) { offset = bmpData.Stride * y; for (int x = 0; x < bmp.Width; x++) { selectedColor = colorBar1.ColorBarHandlers[colorBar1.SelectedColorBar].GetColor(currentData[y, x]); rgbValues[offset + 2] = selectedColor.R; rgbValues[offset + 1] = selectedColor.G; rgbValues[offset + 0] = selectedColor.B; offset += 3; } } Marshal.Copy(rgbValues, 0, ptr, bytes); } catch (Exception exc) { } finally { bmp.UnlockBits(bmpData); } bmp.RotateFlip(RotateFlipType.Rotate90FlipX); bmp.Save(inputStream, ImageFormat.Jpeg); } } } | Сейчас он записывает первую картиночку, а остальные игнорит. Хотя я смотрю stream.Position он сменяется при каждом вызове bmp.Save(); |